C++ 二维整数坐标是否在一个集合中?

C++ 二维整数坐标是否在一个集合中?,c++,set,comparator,C++,Set,Comparator,我有一个二维整数坐标对的列表。我希望在中阅读这些内容,然后确定是否已阅读某个点 整数数据可能位于整数数据类型提供的范围内的任何位置,但实际数据点的数量将很小。因此,使用2D阵列跟踪已读取的点是不切实际的。一套似乎是一种很好的方法 我目前的代码如下: #include <set> #include <iostream> using namespace std; class grid_cell{ public: int x,y; grid_cell(in

我有一个二维整数坐标对的列表。我希望在中阅读这些内容,然后确定是否已阅读某个点

整数数据可能位于整数数据类型提供的范围内的任何位置,但实际数据点的数量将很小。因此,使用2D阵列跟踪已读取的点是不切实际的。一套似乎是一种很好的方法

我目前的代码如下:

#include <set>
#include <iostream>
using namespace std;

class grid_cell{
  public:
    int x,y;
    grid_cell(int x, int y) : x(x), y(y) {}
    grid_cell(){}
    bool operator< (const grid_cell& a) const { return y<a.y || x<a.x; }
};

int main(){
    set<grid_cell> bob;

    bob.insert(grid_cell(1,1));
    bob.insert(grid_cell(-1,1));
    bob.insert(grid_cell(1,-1));
    bob.insert(grid_cell(-1,-1));
    cout<<bob.count(grid_cell(1,1))<<endl;
    cout<<bob.count(grid_cell(-1,1))<<endl;
    cout<<bob.count(grid_cell(1,-1))<<endl;
    cout<<bob.count(grid_cell(-1,-1))<<endl;
}
但是,我知道有些地方不对劲,因为我插入了一些单元,而后来设置告诉我它不知道这些单元。上面的输出应该都是真的,但是,相反,如下所示

1
1
0 <-?????
1
我怀疑比较器是个问题,但不确定如何解决它


有什么想法吗?

这个比较确实是错误的。它不满足所需的语义。试着这样做:

bool operator< (const grid_cell& a) const { return x<a.x || (x==a.x && y<a.y); }
以下是一篇关于这个主题的好文章:


这种比较确实是错误的。它不满足所需的语义。试着这样做:

bool operator< (const grid_cell& a) const { return x<a.x || (x==a.x && y<a.y); }
以下是一篇关于这个主题的好文章:


您的比较运算符没有意义。在你做C++之前,先用钢笔和纸坐下来,计算出你的关系描述。试着用0、1和坐标来协调你的代码。无论是哪种顺序。您的比较运算符都没有意义。在你做C++之前,先用钢笔和纸坐下来,计算出你的关系描述。试着用0、1和坐标来协调你的代码。按任意顺序。