关于C ++ Iterator`map`的问题

时间:2011-06-20 20:32:42

标签: c++ iterator std

在以下代码中,

std::map<Key,Int>::iterator p;
p = randomTable[chunk].find(value);
if (p != randomTable[chunk].end()) {

} else {

}

p != randomTable[chunk].end()如何运作?

对于randomTable中不是最后一个(end())元素的所有元素,这是否意味着什么?

2 个答案:

答案 0 :(得分:5)

如果值不在地图中,

find(value)将返回与end()相同的值。因此,如果值在地图中,您将进入“if”分支,如果没有,您将进入“else”分支。

end()实际上不是地图的成员 - 它指向“结束后的元素”。这是一个有点奇怪的想法,但它可能有助于认为搜索已经查看了地图中的所有元素,但未能找到您正在寻找的元素。

答案 1 :(得分:3)

没有。在std::map<K, V>::find的文档中,您可以看到:

  

返回值

     

如果找到指定的键值,则为元素的迭代器;如果在容器中未找到指定的键,则为map :: end。

所以,if语句只是检查你确实发现了什么。