c++ sort 不使用自定义函数

Posted

技术标签:

【中文标题】c++ sort 不使用自定义函数【英文标题】:c++ sort doesn't use custom function 【发布时间】:2012-10-25 00:25:18 【问题描述】:

我正在尝试排序

std::vector< std::vector< std::string> > perm;

我正在尝试使用算法头中的std::sort

我叫它

std::sort( perm.begin(), perm.end(), sortPerms);

这是我的排序函数:

bool sortPerms (const std::vector<std::string> &i, const std::vector<std::string> &j) 
  for(unsigned int x = 0; x < i.size(); x++) 
    if(i[x] != j[x])
      return false;
  
  //both are equal
  return true;

排序的目的是然后调用 std::unique 来获得一个具有唯一值的向量。 当我在 cygwin 中使用 gcc 编译时,我没有收到任何错误,但我有重复,当我使用 Visual Studio 2010 进行编译时,我收到一个错误,即 operator

我不知道如何解决这个问题,有什么建议吗?

其他细节: 保证所有向量的大小相同。 它的目的是字符串原始向量的每个排列的向量。 每个字符串都是一个命令,我正在寻找可以改变这些命令的所有不同方式。所以我需要去掉重复的部分。

【问题讨论】:

你能指出你有错误的那一行吗? 你希望如何排序仅仅基于不平等的概念? 它是 内部的一个断言,它声明 operator 我没有看到提供的运算符,而是 std::sort() 的回调函数。我猜在 Windows 上它使用LEFT &lt; RIGHT,在你的情况下LEFTstd::vector&lt; std::string &gt;。您可能需要在内部声明带有 operator&lt; 的结构,该结构将派生自 std::vector&lt; std::string &gt; 并完成它。 @Grzegorz:为什么是派生std::vector&lt;std::string&gt; 的新类型?只要像理智的人一样免费(“全球”)operator&lt;bool operator&lt;(const std::vector&lt;std::string&gt;&amp; a, const std::vector&lt;std::string&gt;&amp; b); 【参考方案1】:

您的排序函数应该在a &lt; b 时返回,而不是a != b

另外,默认情况下,std::vector&lt;&gt; 应该已经支持通过operator&lt; 进行字典比较,这应该可以满足您的期望(依次比较每个元素,与用于比较的第一个非等效元素)。见http://en.cppreference.com/w/cpp/container/vector/operator_cmp

您当前的 sortPerms 函数看起来像您将传递给 std::unique 的函数,但它的行为与用于 std::sort 的谓词不同。

【讨论】:

很好,谢谢。我不确定vector是否有这样的功能,谢谢。另外,我认为在这种情况下,比较实际命令的 a 那样进行分组。但我知道这通常是如何完成的。再次感谢

以上是关于c++ sort 不使用自定义函数的主要内容,如果未能解决你的问题,请参考以下文章

sort函数自定义compare方法

C++ std::map sort 如何按值排序 自定义比较函数 比较对象某个字段

c++ STL中的list容器用sort排序是,如何自定义比较

sort大法好———自定义的注意事项!!!!!!

vector中sort用法到自定义比较函数comp

要求编写一自定义函数sort,完成对n个字符串的降序排序?