我在正确设置比较方面遇到困难。
这是我的问题的一个示例,其中我的代码错误地假设{1,2} = {2,1}:http://ideone.com/i7huL
#include <iostream>
#include <map>
using namespace std;
struct myStruct {
int a;
int b;
bool operator<(const myStruct& rhs) const {
return rhs.a < this->a && rhs.b < this->b;
}
};
int main() {
std::map <myStruct, int> mymap ;
myStruct m1={1,2};
myStruct m2={2,1};
mymap.insert(make_pair(m1,3));
std::map<myStruct, int>::iterator it1 = mymap.find(m1);
std::map<myStruct, int>::iterator it2 = mymap.find(m2);
cout << it1->second << it2->second;
// here it1->second=it2->second=3, although I would have expected it2 to be equal to map.end().
}
我可以使用||而不是&&,但是我不确定这是否是正确的方法。我只想以这样一种方式实现operator
谢谢。
最佳答案
是的,这种运算符的实现没有多大意义。我建议:
bool operator<(const myStruct& rhs) const {
return rhs.a < this->a || (rhs.a == this->a && rhs.b < this->b);
}
关于c++ - 如何比较结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11703853/