c++:next_permutation 的比较函数

c++ : comparison function for next_permutation

我想在对象向量上使用 std::next_permutation()

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

但有时我得到两个相等的对象(根据我的标准),所以 Object1 < Object2Object2 < Object1 都是 return false 所以 next_permutation ()无限循环...

编辑:这是我所拥有的一个简单示例(循环永无止境)

MyObject.h :

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

};

Main.cpp :

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;
}

那么我该如何处理这种情况呢?默认 < operator 如何处理这种情况?

But sometimes I got two Objects that are equal

std::next_permutation 不需要独特元素的范围。

因此,这应该可行。 你做错了。

So how could I handle that case ?

修复你的错误。

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

在您的代码中:

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

你的parent放错地方了

应该是

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

否则你 std::next_permutation 使用默认比较,用逗号运算符丢弃结果,然后 return comparison 始终为真(函数指针不为空)