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_map
s 都不在该命名空间中(至少合法地),所以我不太理解@Stef 的声明......有没有来源?
@rubenvb 来自C++ Standards Committee Papers:“由于一些供应商已经在命名空间 std 中定义了带有 hash_* 名称的类,使用该名称定义标准类会引入一个令人讨厌的向后兼容性问题”。跨度>
以上是关于hash_map 和 unordered_map 的区别?的主要内容,如果未能解决你的问题,请参考以下文章
21.hash_map(已被废弃不再使用 被unordered_map代替)