C++ c++;:下一次排列的比较函数

C++ c++;:下一次排列的比较函数,c++,operator-overloading,std,C++,Operator Overloading,Std,我想在对象的向量上使用std::next_permutation() 为此,我必须定义一个比较函数,该函数定义两个对象之间的param,myVector[2]->param); }while(std::next_置换(myVector.begin(),myVector.end()),比较); 返回0; } 那我怎么处理这个案子呢?默认的

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

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

但有时我得到两个相等的对象(根据我的标准),因此
Object1
Object2
都返回
false
,因此下一个置换()无限期地旋转

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

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;
}
bool比较(MyObject*o1,MyObject*o2){return(o1->paramparam);}
int main(){
std::vector myVector;
myVector.push_back(新的MyObject(0));
myVector.push_back(新的MyObject(1));
myVector.push_back(新的MyObject(1));
排序(myVector.begin(),myVector.end(),比较);
做{
printf(“%i,%i,%i\n”,myVector[0]->param,myVector[1]->param,myVector[2]->param);
}while(std::next_置换(myVector.begin(),myVector.end()),比较);
返回0;
}
那我怎么处理这个案子呢?默认的
如何处理这种情况

但有时我得到两个相等的物体

std::next_排列
不需要一系列唯一的元素

因此,这应该是可行的你做错了什么。

那我怎么处理这个案子呢

修正你的错误

当然,我们无法知道这是什么,因为您没有演示。

在您的代码中:

while(std::next_permutation(myVector.begin(), myVector.end()), comparison)
你的父母被放错地方了

应该是

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

否则,使用默认比较执行
std::next_permutation
,使用逗号运算符放弃结果,然后返回始终为真的
comparison
(函数指针不为空)

,应该可以正常工作。这真的是无限期的吗?不应该。您可能有与
std::next\u permutation()
等效的元素。您调试过代码吗?它无限期地停留在哪里?请提供一个最小的、完整的、可验证的例子。很有效。这太棒了!我对这个比较运算符一直很好奇,而问题是语法问题!也谢谢你的解释。