我想在Object的向量上使用hashcode
。
为此,我必须定义一个比较函数,用于定义两个对象之间的std::next_permutation()
(否则它将采用具有不可预测行为的默认比较运算符)
但有时我得到两个相等的对象(根据我的标准),因此< operator
和Object1 < 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;
}
如何处理这种情况?
答案 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。