检查 std::map 中是否存在 - 计数与查找

新手上路,请多包涵

因此,似乎有两种普遍可接受的方法来确定 std::map 中是否存在密钥:

 map.find(key) != map.end()
map.count(key) > 0

一个比另一个更有效吗?具体来说, count() 的概念可以解释为该方法将遍历每个键,计算总计数(并且由于 std::map 的定义,总计数将始终为 0 或 1)。 count() 是否保证在比赛后“停止”,以与 find() 相同的复杂性运行?

原文由 dolphy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
1 个回答

由于地图最多只能有一个键, count 将在找到一个元素后基本上停止。但是,考虑到更通用的容器,例如多图和多集,如果您只关心是否存在具有此键的 某个 元素,那么 find 会更好,因为一旦找到第一个匹配元素,它就可以真正停止。

一般来说, countfind 都将使用容器特定的查找方法(树遍历或哈希表查找),这些方法总是相当有效的。只是 count 必须继续迭代直到相等范围的末尾,而 find 没有。此外,您的代码应该记录意图,因此如果您想查找某些内容,请使用 find

原文由 Kerrek SB 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题