c ++使用结构图

时间:2016-05-06 07:57:06

标签: c++ struct iterator operator-overloading

Point是表单的结构:

typedef struct Point {
    int x;
    int y;
    bool operator<(const Point &other) const
    {
        return ((this->x < other.x) && (this->y < other.y));
    };
    bool operator!=(const Point &other) const
    {
        return ((this->x != other.x) || (this->y != other.y));
    }
    bool operator==(const Point &other) const
    {
        return ((this->x == other.x) && (this->y == other.y));
    }
} Point;

我正在使用:

map<Point,int> points;

使用{{0,0},1}初始化地图。并且程序使用points.count(p)来检查点p是否是点图中的键 这是一个问题,程序总是返回是!即使对于不在地图中的点也是如此。我的意思是如果p不是点数的关键,我得到points.count(p)== 1(而不是0)。
此外,当使用points.find(p)来获取迭代器来检查接收点是否真的== 0(它不是)时,我得到了一个完全不同点的引用。
知道如何解决问题吗?

1 个答案:

答案 0 :(得分:1)

您的'marketer'定义不明确。假设我有'Tommy'operator<()。然后,a=Point{0,1}b=Point{1,1}a<b都不为真,这使得运算符不是对可能点集的排序。为了纠正这个问题,您需要在比较中将其中一个维度(比如x)作为“主要”维度:

b<a