H ++中的Hashtable?
-
02-07-2019 - |
题
每当我需要存储与特定类型的值(键值 - 例如字符串或其他对象)相关联的一些数据时,我通常使用C ++ stdlib映射。 stdlib映射实现基于树,它提供比标准数组或stdlib向量更好的性能(O(log n))。
我的问题是,你知道任何C ++ <!> quot; standard <!> quot;哈希表实现,提供更好的性能(O(1))?类似于Java API中Hashtable类中可用的内容。
解决方案
如果您使用的是C ++ 11,则可以访问<unordered_map>
和<unordered_set>
标题。这些提供 std::unordered_map
和 std::unordered_set
。
如果您正在使用带有TR1的C ++ 03,则可以使用相同的标题访问类std::tr1::unordered_map
和std::tr1::unordered_set
(除非您使用的是GCC,在这种情况下标题是<tr1/unordered_map>
并且<tr1/unordered_set>
代替)。
在所有情况下,也有相应的unordered_multimap
和unordered_multiset
类型。
其他提示
这里有许多 hash_map 对象,但它不是stl的一部分。这是SGI的延伸,所以如果你在寻找STL中的东西,我认为你运气不好。
std :: tr1 :: unordered_map,在<unordered_map>
如果你没有tr1,请加强并使用
<boost/unordered_map.hpp>
Visual Studio在标题stdext::hash_map
中有<hash_map>
类,而gcc在同一标题中有类__gnu_cxx::hash_map
。
请参阅SGI的 std :: hash_map 。
这也包含在 STLPort 发行版中。