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(它不是)时,我得到了一个完全不同点的引用。
知道如何解决问题吗?
答案 0 :(得分:1)
您的'marketer'
定义不明确。假设我有'Tommy'
和operator<()
。然后,a=Point{0,1}
,b=Point{1,1}
和a<b
都不为真,这使得运算符不是对可能点集的排序。为了纠正这个问题,您需要在比较中将其中一个维度(比如x)作为“主要”维度:
b<a