【问题标题】:Difference between hash_map and unordered_map?hash_map 和 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 解决了。

【问题讨论】:

    标签: c++ stl hashmap 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_* 名称的类,使用该名称定义标准类会引入一个令人讨厌的向后兼容性问题”。跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2011-01-22
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多