我在正确设置比较方面遇到困难。
这是我的问题的一个示例,其中我的代码错误地假设{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/

10-13 05:34