我正在为一个简单的编程问题编写解决方案,但我无法使map :: find()工作。我在使用BFS时使用地图来标记被访问的顶点。我知道我可以使用其他一些数据结构,比如2D bool数组,但我真的很想让它适用于地图。 这是我的代码:http://pastebin.com/mANej4vp
问题是,即使尚未访问过tempR位置,visit [tempR]也始终为true。并且visited.size()是1,但它响应访问[now]和访问[tempR]为真;而tempR不等于现在。
Duom.in文件应包含:http://pastebin.com/L7qMG0bd
你知道为什么会这样吗?
答案 0 :(得分:3)
您的operator<
和operator==
不一致
两个职位
pos p1 = {1, 2, 3, 4};
pos p2 = {1, 10, 20, 30};
bool b1 = !(p1 < p2) && !(p2 < p1);
bool b2 = p1 == p2;
b1
是正确的,因此根据定义,b2
必须为真,但事实并非如此。
换句话说,重写您的operator<
以进行适当的比较,而不仅仅是Hx
答案 1 :(得分:2)
我没有调试你的代码,我真的不明白,但bool operator<(const pos& a) const
的语义似乎与我相反。
考虑到std :: map只使用那个应该返回this->Hx < a.Hx
的成员运算符,至少在Hx代表正坐标的情况下。并且它应该是总顺序,2D坐标似乎应该使用x&amp;组合。无论如何......