我最近发现C++中哈希映射的实现将被称为unordered_map。 当我查找为什么他们不只使用hash_map时,我发现显然存在与hash_map实现相关的兼容性问题,而unordered_map解决了这些问题(更多信息请参见此处)。 该维基页面没有提供更多信息,因此我想知道是否有人了解hash_map存在哪些问题,而unordered_map可以解决。
由于C++标准库中没有定义哈希表,因此标准库的不同实现者会提供非标准的哈希表,通常称为hash_map。 由于这些实现是不遵循标准的编写的,它们在功能和性能保证方面都存在微妙的差异。 从C++11开始,C++标准库增加了哈希表实现。为了避免与这些非标准实现发生冲突,并防止开发人员在代码中意外使用新类,决定为该类使用替代名称。 所选用的替代名称是unordered_map,实际上更具描述性,因为它暗示了该类的映射接口和其元素的无序性。
std
命名空间没有完全实现他们所希望的,这是其中一件事情。不过我不知道什么能够合理地防止这个问题的发生。 - Michael Burrnamespace std
失败了吗?非标准的hash_map
并没有在该命名空间中(至少在法律上是如此),所以我不太理解 @Stef 所说的话。有这方面的来源吗? - rubenvbstd::hash
函数。unordered_map
给人一种错觉,认为您可以只需投入任何自定义类型而无需执行其他操作。 - Jimmy T.