因此,似乎有两种普遍可接受的方法来确定 std::map
中是否存在密钥:
map.find(key) != map.end()
map.count(key) > 0
一个比另一个更有效吗?具体来说, count()
的概念可以解释为该方法将遍历每个键,计算总计数(并且由于 std::map
的定义,总计数将始终为 0 或 1)。 count()
是否保证在比赛后“停止”,以与 find()
相同的复杂性运行?
原文由 dolphy 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于地图最多只能有一个键,
count
将在找到一个元素后基本上停止。但是,考虑到更通用的容器,例如多图和多集,如果您只关心是否存在具有此键的 某个 元素,那么find
会更好,因为一旦找到第一个匹配元素,它就可以真正停止。一般来说,
count
和find
都将使用容器特定的查找方法(树遍历或哈希表查找),这些方法总是相当有效的。只是count
必须继续迭代直到相等范围的末尾,而find
没有。此外,您的代码应该记录意图,因此如果您想查找某些内容,请使用find
。