c ++:next_permutation的比较函数

时间:2015-07-07 12:44:37

标签: c++ operator-overloading std

我想在Object的向量上使用hashcode

为此,我必须定义一个比较函数,用于定义两个对象之间的std::next_permutation()(否则它将采用具有不可预测行为的默认比较运算符)

但有时我得到两个相等的对象(根据我的标准),因此< operatorObject1 < Object2都返回Object2 < Object1所以next_permutation()无限期地转动......

编辑:这是我所拥有的一个简单示例(循环永不结束)

MyObject.h:

false

Main.cpp:

class MyObject {
    int param;
    MyObject(int i);

};

那我怎么能处理那个案子呢?默认bool comparison (MyObject * o1, MyObject * o2) { return (o1->param < o2->param); } int main(){ std::vector<MyObject*> myVector; myVector.push_back(new MyObject(0)); myVector.push_back(new MyObject(1)); myVector.push_back(new MyObject(1)); std::sort(myVector.begin(), myVector.end(), comparison); do{ printf("%i, %i, %i \n", myVector[0]->param, myVector[1]->param, myVector[2]->param); } while(std::next_permutation(myVector.begin(), myVector.end()), comparison); return 0; } 如何处理这种情况?

2 个答案:

答案 0 :(得分:2)

在您的代码中:

while(std::next_permutation(myVector.begin(), myVector.end()), comparison)

你的父母错位

应该是

while(std::next_permutation(myVector.begin(), myVector.end(), comparison))

否则你用std::next_permutation进行默认比较,用逗号运算符丢弃结果,然后返回comparison,它总是为真(函数指针不为空)

答案 1 :(得分:-1)

  

但有时我得到两个相等的对象

std::next_permutation不需要一系列独特元素。

因此,这应该有效。 你做错了什么。

  

那我怎么能处理那个案子?

修正你的错误。

当然,我们无法知道那是什么,因为你没有提出your testcase