C ++ STL map :: find()问题

时间:2012-11-16 17:24:14

标签: c++ stl maps find breadth-first-search

我正在为一个简单的编程问题编写解决方案,但我无法使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

你知道为什么会这样吗?

2 个答案:

答案 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;组合。无论如何......