哈希表在C ++?(Hashtable in C++?)

2019-06-21 03:45发布

我通常使用C ++ STDLIB地图每当我需要存储与特定类型的值(一个密钥值 - 例如一个字符串或其它对象)相关联的一些数据。 所述STDLIB地图的实现是基于在其上提供了更好的性能(为O(log n))的比标准阵列或STDLIB矢量树。

我的问题是,你知道的任何C ++“标准”散列表实施方案,可提供更好的性能(O(1))? 类似的东西,什么是从Java API的Hashtable类可用。

Answer 1:

如果您使用C ++ 11,你有机会获得<unordered_map><unordered_set>头。 这些提供类std::unordered_mapstd::unordered_set

如果您使用C ++ 03有TR1,您可以访问类std::tr1::unordered_mapstd::tr1::unordered_set ,使用相同的标题(除非你使用GCC,在这种情况下,头是<tr1/unordered_map><tr1/unordered_set>代替)。

在所有的情况下,也有相应的unordered_multimapunordered_multiset太类型。



Answer 2:

如果您还没有unordered_map或unordered_set,他们的一部分提升 。
下面是这两个文件 。



Answer 3:

有一个的hash_map对象很多,这里所提到的,但它不是STL的一部分。 这是一个SGI的扩展,所以如果你在STL寻找的东西,我觉得你的运气了。



Answer 4:

的std :: TR1 :: unordered_map,在<unordered_map>

如果你没有TR1,得到提振,并使用boost :: unordered_map在<boost/unordered_map.hpp>



Answer 5:

Visual Studio中具有类stdext::hash_map在头<hash_map>和gcc具有类__gnu_cxx::hash_map在相同的标题。



Answer 6:

见的std ::的hash_map从SGI。

这包括在STLPort的分布也是如此。



Answer 7:

的hash_map也支持GNU的的libstdc ++ 。

Dinkumware的也支持这一点,这意味着大量的实现将有一个的hash_map(我想即使的Visual C ++与Dinkumware的提供)。



Answer 8:

如果您有可用于侑编译器TR1的扩展,使用这些。 如果没有,boost.org有一个版本这是除的std ::命名空间颇为相似。 在这种情况下,把在using声明,所以你可以切换以后标准::。



Answer 9:

的std ::的hash_map



文章来源: Hashtable in C++?