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()
等效的元素。您调试过代码吗?它无限期地停留在哪里?请提供一个最小的、完整的、可验证的例子。很有效。这太棒了!我对这个比较运算符一直很好奇,而问题是语法问题!也谢谢你的解释。