在C + +的哈希表?

每当我需要存储与特定types的值(键值 – 例如string或其他对象)相关联的数据时,我通常使用C ++ stdlib映射。 stdlib映射实现基于树提供比标准数组或stdlib向量更好的性能(O(log n))。

我的问题是,你知道任何提供更好的性能(O(1))的C ++“标准”散列表实现吗? 类似于Java API中的Hashtable类中可用的内容。

如果您使用C ++ 11,则可以访问<unordered_map><unordered_set>标题。 这些提供了类std::unordered_mapstd::unordered_set

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

在所有情况下,也有相应的unordered_multimapunordered_multisettypes。

如果你还没有unordered_map或unordered_set,它们是boost的一部分。
这是两个文件 。

有一个hash_map对象在这里已经提到了很多,但它不是stl的一部分。 这是一个SGI扩展,所以如果你在STL中寻找某些东西,我认为你是不幸的。

std :: tr1 :: unordered_map,在<unordered_map>

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

Visual Studio在头文件<hash_map>__gnu_cxx::hash_map类,而gcc在同一个头文件中有类__gnu_cxx::hash_map

参见SGI的std :: hash_map 。

这也包含在STLPort分配中。

GNU的libstdc ++也支持hash_map。

Dinkumware也支持这一点,这意味着大量的实现将有一个hash_map(我认为甚至Visual C ++与Dinkumware交付)。

如果您的TR1扩展可用于编译器,请使用这些扩展。 如果没有,boost.org有一个非常相似的版本,除了std :: namespace。 在这种情况下,放入使用声明,以便以后可以切换到std ::。

的std ::的hash_map