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 < RIGHT
,在你的情况下LEFT
是std::vector< std::string >
。您可能需要在内部声明带有 operator<
的结构,该结构将派生自 std::vector< std::string >
并完成它。
@Grzegorz:为什么是派生std::vector<std::string>
的新类型?只要像理智的人一样免费(“全球”)operator<
! bool operator<(const std::vector<std::string>& a, const std::vector<std::string>& b);
【参考方案1】:
您的排序函数应该在a < b
时返回,而不是a != b
。
另外,默认情况下,std::vector<>
应该已经支持通过operator<
进行字典比较,这应该可以满足您的期望(依次比较每个元素,与用于比较的第一个非等效元素)。见http://en.cppreference.com/w/cpp/container/vector/operator_cmp
您当前的 sortPerms 函数看起来像您将传递给 std::unique
的函数,但它的行为与用于 std::sort
的谓词不同。
【讨论】:
很好,谢谢。我不确定vector是否有这样的功能,谢谢。另外,我认为在这种情况下,比较实际命令的 a 那样进行分组。但我知道这通常是如何完成的。再次感谢以上是关于c++ sort 不使用自定义函数的主要内容,如果未能解决你的问题,请参考以下文章
C++ std::map sort 如何按值排序 自定义比较函数 比较对象某个字段