【问题标题】:C++ STL map::find() problemsC++ STL map::find() 问题
【发布时间】:2026-01-31 04:05:01
【问题描述】:

我正在为一个简单的编程问题编写解决方案,但我无法让 map::find() 工作。我在使用 BFS 时使用地图来标记访问的顶点。我知道我可以使用其他一些数据结构,例如 2D bool 数组,但我真的很想让它与地图一起使用。 这是我的代码:http://pastebin.com/mANej4vp

问题是visited[tempR] 始终为真,即使尚未访问tempR 位置。而且visited.size() 为1,但它同时响应visited[now] 和visited[tempR] 为真;而 tempR 不等于现在。

Duom.in 文件应包含以下内容:http://pastebin.com/L7qMG0bd

你知道为什么会这样吗?

【问题讨论】:

  • 请将问题简化为SSCCE 并直接在您的问题中发布。我不想浏览数百行 pastebin 代码来调试您的程序。
  • 我还没有完成代码..但请记住,在地图上使用operator[] 不等同于findoperator[] 将在找不到该值时将其插入到地图中。

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


【解决方案1】:

您的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&lt; 以进行适当的比较,而不仅仅是Hx

【讨论】:

    【解决方案2】:

    我没有调试过你的代码,我也不是很明白,但是bool operator&lt;(const pos&amp; a) const 的语义对我来说似乎是相反的。

    考虑 std::map 只使用那个成员运算符,它应该返回this-&gt;Hx &lt; a.Hx,至少如果 Hx 代表一个正坐标。它应该是一个 total 顺序,作为 2D 坐标似乎你应该使用 x & y 的组合...

    【讨论】: