每当我需要存储与特定类型的值(键值 - 例如字符串或其他对象)关联的一些数据时,我通常使用 C++ stdlib 映射。stdlib 映射实现基于树,它提供比标准数组或 stdlib 向量更好的性能 (O(log n))。
我的问题是,你知道任何提供更好性能(O(1))的 C++“标准”哈希表实现吗?类似于 Java API 的 Hashtable 类中可用的东西。
每当我需要存储与特定类型的值(键值 - 例如字符串或其他对象)关联的一些数据时,我通常使用 C++ stdlib 映射。stdlib 映射实现基于树,它提供比标准数组或 stdlib 向量更好的性能 (O(log n))。
我的问题是,你知道任何提供更好性能(O(1))的 C++“标准”哈希表实现吗?类似于 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>
and <tr1/unordered_set>
)。
在所有情况下,也有相应的unordered_multimap
和unordered_multiset
类型。
这里有很多人提到的hash_map对象,但它不是 stl 的一部分。它是一个 SGI 扩展,所以如果你在 STL 中寻找某些东西,我认为你不走运。
Visual Studiostdext::hash_map
在 header 中有这个类<hash_map>
,而 gcc__gnu_cxx::hash_map
在同一个 header 中有这个类。
std::tr1::unordered_map,在<unordered_map>
如果您没有 tr1,请获取 boost,并在 in 中使用 boost::unordered_map<boost/unordered_map.hpp>
参见SGI 的std::hash_map。
这也包含在STLPort发行版中。
GNU 的libstdc++也支持 hash_map 。
Dinkumware 也支持这一点,这意味着很多实现都会有一个 hash_map(我认为即使是 Visual C++ 也提供了 Dinkumware)。
如果您的编译器有可用的 TR1 扩展,请使用它们。如果没有,boost.org 有一个非常相似的版本,除了 std:: 命名空间。在这种情况下,请放入 using 声明,以便稍后切换到 std::。