hash_map 和 unordered_map 的区别?

Posted

技术标签:

【中文标题】hash_map 和 unordered_map 的区别?【英文标题】:Difference between hash_map and unordered_map? 【发布时间】:2010-12-11 09:39:24 【问题描述】:

最近发现C++中hash map的实现会叫unordered_map

当我查看他们为什么不只是使用hash_map 时,我发现显然hash_map 的实现存在兼容性问题,unordered_map 解决了(更多关于它here)。

那个 wiki 页面没有提供更多信息,所以我想知道是否有人知道 hash_map 的一些问题,unordered_map 解决了。

【问题讨论】:

【参考方案1】:

由于 C++ 标准库中没有定义哈希表,标准库的不同实现者会提供一个非标准哈希表,通常命名为 hash_map。因为这些实现不是按照标准编写的,所以它们在功能和性能保证上都有细微的差别。

从C++11 开始,哈希表实现已添加到 C++ 标准库标准中。决定为该类使用替代名称,以防止与这些非标准实现发生冲突,并防止代码中包含 hash_table 的开发人员无意中使用新类。

选择的备用名称是unordered_map,它确实更具描述性,因为它暗示了类的地图界面及其元素的无序性质。

【讨论】:

这表明std 命名空间并没有达到他们的预期。并不是说我知道什么可以合理地阻止这个问题。 MSVC 为其标准扩展库提供了 stdext。 @MichaelBurr namespace std 怎么在这里失败了?非标准的hash_maps 都不在该命名空间中(至少合法地),所以我不太理解@Stef 的声明......有没有来源? @rubenvb 来自C++ Standards Committee Papers:“由于一些供应商已经在命名空间 std 中定义了带有 hash_* 名称的类,使用该名称定义标准类会引入一个令人讨厌的向后兼容性问题”。跨度>

以上是关于hash_map 和 unordered_map 的区别?的主要内容,如果未能解决你的问题,请参考以下文章

21.hash_map(已被废弃不再使用 被unordered_map代替)

map,hash_map和unordered_map效率比较

C ++中的map与hash_map

hash_map 是 STL 的一部分吗?

网易实习笔试真题C/C++

19.允许重复的unordered_map