【问题标题】:Is a 2D integer coordinate in a set?一个二维整数坐标是否在集合中?
【发布时间】:2013-04-08 22:15:10
【问题描述】:

我有一个二维整数坐标列表(坐标对)。我想阅读这些内容,然后确定是否已阅读某个点。

整数数据可能在整数数据类型提供的范围内的任何位置,但实际数据点的数量会很少。因此,使用二维数组来跟踪已读取的点是不切实际的。 set 似乎是这样做的好方法。

我目前的代码如下:

#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

我怀疑比较器有问题,但不知道如何解决。

有什么想法吗?

【问题讨论】:

  • 您的比较运算符没有意义。在你使用 C++ 之前,请先用笔和纸坐下来,弄清楚你的关系所描述的内容。
  • 尝试与您的代码协调(0,1) 和协调(1,0)。任意顺序。

标签: c++ set comparator


【解决方案1】:

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

bool operator< (const grid_cell& a) const { return x<a.x || (x==a.x && y<a.y); }

这是一篇关于这个主题的好文章:

http://www.drdobbs.com/cpp/a-strategy-for-defining-order-relations/240147625

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 2010-11-10
    • 2016-02-06
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多