hash_map和unordered_map之间的区别?

kid*_*lox 45 c++ stl unordered-map hashmap

我最近发现将调用C++中哈希映射的实现unordered_map.

当我抬起头,为什么他们不只是使用hash_map,我发现,显然有与实施的兼容性问题hash_mapunordered_map可以解决(更多关于它在这里).

该wiki页面没有提供更多信息,所以我想知道是否有人知道hash_mapunordered_map解决方案的一些问题.

Ste*_*tef 71

由于C++标准库中没有定义哈希表,因此标准库的不同实现者将提供通常命名的非标准哈希表hash_map.由于这些实现不是按照标准编写的,因此它们在功能和性能保证方面都存在细微差别.

C++ 11开始,哈希表实现已添加到C++标准库标准中.决定使用该类的备用名称来防止与这些非标准实现的冲突,并防止hash_table在其代码中的开发人员无意中使用新类.

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

  • @MichaelBurr这个`namespace std`怎么会失败?没有非标准的`hash_map`在那个命名空间中(至少在法律上是这样),所以我不太明白@Stef的声明......有没有这样的来源? (9认同)
  • 这是表明`std`命名空间没有达到他们所希望的那样的事情之一.不是我知道什么会合理地阻止这个问题. (5认同)
  • @rubenvb来自[C++标准委员会文件](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1456.html):"因为几个供应商已经在命名空间std中定义了类使用hash_*名称,定义具有该名称的标准类将引入令人讨厌的向后兼容性问题". (3认同)