【发布时间】:2018-02-12 15:44:53
【问题描述】:
类似于下面的链接,
https://stackoverflow.com/a/30424281/1442787
我的班级 Point 有成员变量 double x,y,z。
我在课堂上重载了operator < 以将值插入std::map
bool Point::operator<(const Point &p)const{
return ( x < p.x
|| ( x == p.x
&& ( y < p.y
|| ( y == p.y
&& z < p.z))));
}
我已经将我的地图定义为 Point 类作为键,std::pair 作为值
typedef std::pair<int,int> mypair;
typedef std::map<Point, mypair> mymap;
std::map 不允许插入重复键。
但是,在我的代码中,在插入键/值对时,重复键也被插入,如下所示
map:0.436612,16.527741,0.000000,22,2 map:0.454781,17.427262,15.264347,74,12 map:0.454781,17.427262,15.264347,27,11 map:0.608370,17.373443,20.124160,21,13 map:0.608370,17.373443,20.124160,69,11
重复插入的原因是什么?
【问题讨论】:
-
查看一些代码会有所帮助,例如:
operator<. -
我打赌比较双打的平等是问题所在。
0.454781和0.454781看起来相等,但也许它们不是 -
浮点/双精度与用于打印它们的精度。
-
两个双精度数几乎不相等,使用 epsilon 容差
-
@tobi303 重载
标签: c++ duplicates containers stdmap