每当我需要存储与特定类型的值相关联的一些数据(键值-例如字符串或其他对象)时,我通常使用C ++ stdlib map。 stdlib map实现基于树,提供比标准数组或stdlib向量更好的性能(O(log n))。
我的问题是,您是否了解任何C ++“标准”哈希表实现,可以提供更好的性能(O(1))?类似于Java API中的Hashtable类可用的内容。
每当我需要存储与特定类型的值相关联的一些数据(键值-例如字符串或其他对象)时,我通常使用C ++ stdlib map。 stdlib map实现基于树,提供比标准数组或stdlib向量更好的性能(O(log n))。
我的问题是,您是否了解任何C ++“标准”哈希表实现,可以提供更好的性能(O(1))?类似于Java API中的Hashtable类可用的内容。
<unordered_map>
和<unordered_set>
头文件。它们提供了类std::unordered_map
和std::unordered_set
。std::tr1::unordered_map
和std::tr1::unordered_set
,使用相同的头文件(除非您正在使用GCC,在这种情况下,头文件是<tr1/unordered_map>
和<tr1/unordered_set>
)。unordered_multimap
和unordered_multiset
类型。Visual Studio在头文件<hash_map>
中拥有类stdext::hash_map
,而gcc在同一头文件中拥有类__gnu_cxx::hash_map
。
namespace std { #ifdef __GNUC__ using namespace __gnu_cxx; #else using namespace stdext; #endif }
- ypnos在 <unordered_map>
中,有一个名为 std::tr1::unordered_map 的类。
如果您没有 tr1,请获取 boost,并使用 <boost/unordered_map.hpp>
中的 boost::unordered_map。
请参考 SGI 的 std::hash_map。
这也包含在 STLPort 发行版中。