【发布时间】:2014-02-26 10:16:38
【问题描述】:
C++ STL unordered_map 如何解决冲突?
看着http://www.cplusplus.com/reference/unordered_map/unordered_map/,它说“唯一键 容器中的两个元素不能有等价的键。”
这应该意味着容器确实在解决冲突。但是,该页面并没有告诉我它是如何做到的。我知道一些解决冲突的方法,比如使用链表和/或探测。我想知道的是c++ STL unordered_map是如何解决的。
【问题讨论】:
-
它依赖于实现。语言参考不会告诉您它是如何完成的,因为它没有在标准中指定应该如何完成。
-
libstdc++ 使用线性链接,但 STL 的其他实现可能使用其他技术
-
从技术上讲,我们根本没有使用 STL。我们使用的是 C++ 标准库,它是一个接口规范。是的,它有多种实现方式。
-
不,STL 是几十年前的一个库,它的想法被窃取并合并到 C++ 标准库中。每个 C++ 编译器都必须通过它选择的任何方式来实现标准库。人们倾向于将标准库中受 STL 启发的部分称为 STL,尽管这并不正确。
-
“容器中没有两个元素可以有等效的键”是
unordered_map的Pred参数的条件。冲突的概念适用于Hash参数。两个键可能不等价,但仍然可以散列到相同的值——散列冲突的定义。
标签: c++ stl unordered-map