.NET Framework提供了一个Dictionary<TKey,TValue>类,它是基于哈希表实现的,可以在常量时间(O(1))内检索数据。我想找到一个类似的C++实现。我知道std::map,但是其中的数据检索需要对数时间。是否有任何好的哈希表实现可以在C++中在常量时间内检索数据?
如果我要编写自己的哈希表,我如何为键计算哈希码?与.NET一样,我考虑对类型实现GetHashCode()方法。
如果我像上面那样进行操作,而给定的键类型没有GetHashCode()方法,编译器会报错。但是当键是原始类型如int时,这种方法不起作用。我可能需要编写一个包装器来提供GetHashCode()。
我想知道C++实现这个的方式是什么?
有什么想法吗?
如果我要编写自己的哈希表,我如何为键计算哈希码?与.NET一样,我考虑对类型实现GetHashCode()方法。
template<typename TKey,typename TVal>
class Dictionary
{
public:
void Add(TKey key, TVal val){
int hashCode = key.GetHashCode();
/* .... */
}
}
如果我像上面那样进行操作,而给定的键类型没有GetHashCode()方法,编译器会报错。但是当键是原始类型如int时,这种方法不起作用。我可能需要编写一个包装器来提供GetHashCode()。
我想知道C++实现这个的方式是什么?
有什么想法吗?
std::hash_map
。我会使用std::tr1::unordered_map
,它将成为下一个标准版本的std::unordered_map
。 - sbistd::hash_map
是SGI的扩展。它也可以在G++中使用,但在不同的命名空间(__gnu_cxx
)中。 - Michael Ekstrandstdext
命名空间中或类似的位置,但它曾经在std
命名空间中,因此他们的库中存在这样的版本。) - sbi