我正在寻找一个C++中的哈希函数,用于将字符串哈希为整数。我使用了CMapStringToPtr,但它有一个名为“GetNextAssoc”的函数,允许检索键作为字符串,这意味着字符串必须被存储,占用了大量内存。 是否有其他哈希函数可以占用更少的内存,并且不需要存储字符串?
std::hash
来实现。另外,你也可以自己编写哈希函数,只需要将字符串通过常量引用传递,并循环遍历其每个字符,将它们添加到一个整数中,然后对某个值取模即可 :)std::hash
返回的是 size_t
而不是 int
。 - Fries int hash( const string &key, int tableSize) {
int hashVal = 0;
for(int i = 0; i<key.length(); i++)
hashVal = 37*hashVal+key[i];
hashVal %= tableSize;
if(hashVal<0)
hashVal += tableSize;
return hashVal;
}
std::hash<std::string>()()
。 - Kerrek SBboost::hash_value(const std::string & val)
。 - ali_bahoostd::hash<std::string>()()
似乎是C++11的一个特性。我的编译器(VS 2008)没有这个功能,我很遗憾。 - Christian Ammerstd::tr1::hash
。 - Kerrek SB