【发布时间】:2019-07-07 03:49:00
【问题描述】:
我有一个关于查找速度的问题。我想知道哪个 STL 容器可以在 C++ 中产生最快的查找时间。我想到了unordered_map,因为它是通过哈希映射实现的,但我担心它的性能会受到惩罚,因为它包含键值对,而set 只包含键。我想答案将取决于 1)密钥的数据类型; 2)set的STL实现。
换句话说,哪个容器可以更快地搜索键的存在,是 set、unordered_map 还是其他?
编辑:
如果对容器的实现或机制有更多解释,将不胜感激。例如,unordered_map 很快,因为它是用 hashmap 实现的。这比说“这取决于需要”更有帮助。谢谢!
【问题讨论】:
-
取决于很多,即使在
std::vector中进行线性搜索也可能比对数搜索更快。 -
你知道还有
unordered_set,对吧? -
没有一个标准容器会给你最快的查找时间。哈希表的实现比 STL 的无序容器更好。甚至,如果您了解您的用例,您可以针对该情况优化您自己的哈希表实现(或者,在特定情况下,可能有比哈希表更适合的结构)。
标签: c++ stl set unordered-map