【问题标题】:Does find() also return the last element of a map in C++?find() 是否也返回 C++ 中地图的最后一个元素?
【发布时间】:2014-09-09 11:38:33
【问题描述】:

我想使用 find() 方法来捕获我的 std::map() 的特定元素

现在返回值要么是我正在寻找的元素,要么如果尚未找到该元素,则它指向地图的末尾(参见:http://www.cplusplus.com/reference/map/map/find/)。

所以我使用这两个信息来决定一个元素是否在地图中。但是如果元素已经在里面但在最后会发生什么?然后我的 if-query 将确定它不存在,因此我的程序将被弥补。

我做对了这个例程吗?如果,如何防止它?

感谢您的支持

【问题讨论】:

  • 如果您将“在最后”理解为“在end()”,那么就没有“在最后”的元素。最后一个元素就在end() 之前,因为end()定义 最后一个元素之后。根据定义,end() 处没有元素。

标签: c++ map find


【解决方案1】:

您实际上可以使用if(!map.count(elem)) 检查映射中是否存在elem,如果映射中不存在elem,则count() 返回0,而find() 返回一个迭代器,该迭代器必须与之进行比较结束迭代器,即if(map.find(elem) != map.end())

【讨论】:

  • 你衡量过两者的性能差异吗?
  • @jarod42,确实写起来更便宜,就性能而言,count 可能只是 find() 的包装,具体取决于实现,还有另一个线程在谈论 count 与 find 的性能。 stackoverflow.com/questions/3886593/…
  • 即使它们是相同的,人们可能会争辩说使用 find() 会更好,因为它在其他容器上可能更快,例如向量。在那里,习惯于写 find(x) != map.end() 而不是 count() != 0 可能会有所回报。
【解决方案2】:

任何容器中的最后一个元素都与容器end 迭代器不同。 end 迭代器实际上比容器中的最后一个元素超出一步。

这意味着您可以轻松休息,使用find 无后顾之忧。如果您要查找的元素是最后一个元素,您将得到您要搜索的内容。

【讨论】:

  • 感谢您的帮助,如果它不会被锁定,我会将其标记为答案。这些信息是否在线其他任何地方?
猜你喜欢
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2016-01-30
相关资源
最近更新 更多