【问题标题】:how to sort vector string array using cmp function如何使用 cmp 函数对向量字符串数组进行排序
【发布时间】:2018-11-18 21:08:48
【问题描述】:

这是我的比较功能

bool cmp(string* s1,string* s2)
{return(strlen(s1)>strlen(s2));}

这是我的向量数组

vector<string>v(n);

这是我的排序功能

sort(v.begin(),v.end(),cmp);

我哪里做错了

【问题讨论】:

  • 请添加语言标签
  • 当您将string* 传递给strlen 时,您肯定会收到警告吗?这不是strlen 接受的。

标签: c++ string sorting


【解决方案1】:

我哪里做错了

比较函数should have的签名类似如下:

 bool cmp(const Type1 &a, const Type2 &b);

因此您的比较函数可能如下所示:

bool cmp(std::string const& s1, std::string const& s2)
{
    return s1.length() > s2.length();
}

它起作用了,请说明它起作用的原因

之所以有效,是因为std::sort 将采用 2 个向量元素并在每一轮将它们发送到比较函数。该向量由std::strings 组成,您可以选择通过值或引用或const 引用传递它们,但您不能像尝试的那样传递指针(为此您需要std::vector&lt;std::string *&gt;,有点无意义)

【讨论】:

  • 它起作用了,你能说明它起作用的原因吗,为什么它需要 const 类型
  • 因为这是函数签名std::sortexpect。
  • @NavneetHingankar 添加到答案中
  • @NavneetHingankar bool cmp(string a, string b) 也可以。此护理中的 const 引用仅用于性能。
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
相关资源
最近更新 更多