c++:next_permutation 的比较函数
c++ : comparison function for next_permutation
我想在对象向量上使用 std::next_permutation()
。
为此,我必须定义一个比较函数来定义两个对象之间的 < operator
(否则它将采用具有不可预测行为的默认比较运算符)
但有时我得到两个相等的对象(根据我的标准),所以 Object1 < Object2
和 Object2 < 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
始终为真(函数指针不为空)
我想在对象向量上使用 std::next_permutation()
。
为此,我必须定义一个比较函数来定义两个对象之间的 < operator
(否则它将采用具有不可预测行为的默认比较运算符)
但有时我得到两个相等的对象(根据我的标准),所以 Object1 < Object2
和 Object2 < 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
始终为真(函数指针不为空)