我通常使用C ++ STDLIB地图每当我需要存储与特定类型的值(一个密钥值 - 例如一个字符串或其它对象)相关联的一些数据。 所述STDLIB地图的实现是基于在其上提供了更好的性能(为O(log n))的比标准阵列或STDLIB矢量树。
我的问题是,你知道的任何C ++“标准”散列表实施方案,可提供更好的性能(O(1))? 类似的东西,什么是从Java API的Hashtable类可用。
我通常使用C ++ STDLIB地图每当我需要存储与特定类型的值(一个密钥值 - 例如一个字符串或其它对象)相关联的一些数据。 所述STDLIB地图的实现是基于在其上提供了更好的性能(为O(log n))的比标准阵列或STDLIB矢量树。
我的问题是,你知道的任何C ++“标准”散列表实施方案,可提供更好的性能(O(1))? 类似的东西,什么是从Java API的Hashtable类可用。
如果您使用C ++ 11,你有机会获得<unordered_map>
和<unordered_set>
头。 这些提供类std::unordered_map
和std::unordered_set
。
如果您使用C ++ 03有TR1,您可以访问类std::tr1::unordered_map
和std::tr1::unordered_set
,使用相同的标题(除非你使用GCC,在这种情况下,头是<tr1/unordered_map>
和<tr1/unordered_set>
代替)。
在所有的情况下,也有相应的unordered_multimap
和unordered_multiset
太类型。
如果您还没有unordered_map或unordered_set,他们的一部分提升 。
下面是这两个文件 。
有一个的hash_map对象很多,这里所提到的,但它不是STL的一部分。 这是一个SGI的扩展,所以如果你在STL寻找的东西,我觉得你的运气了。
的std :: TR1 :: unordered_map,在<unordered_map>
如果你没有TR1,得到提振,并使用boost :: unordered_map在<boost/unordered_map.hpp>
Visual Studio中具有类stdext::hash_map
在头<hash_map>
和gcc具有类__gnu_cxx::hash_map
在相同的标题。
见的std ::的hash_map从SGI。
这包括在STLPort的分布也是如此。
的hash_map也支持GNU的的libstdc ++ 。
Dinkumware的也支持这一点,这意味着大量的实现将有一个的hash_map(我想即使的Visual C ++与Dinkumware的提供)。
如果您有可用于侑编译器TR1的扩展,使用这些。 如果没有,boost.org有一个版本这是除的std ::命名空间颇为相似。 在这种情况下,把在using声明,所以你可以切换以后标准::。
的std ::的hash_map