我在c ++中寻找哈希函数来将字符串哈希到int。我使用了CMapStringToPtr,但它有一个名为“GetNextAssoc”的函数,它允许将键检索为字符串,这意味着必须存储字符串并且它会获得如此多的内存。 是否有任何其他哈希函数获得更少的内存并且不存储字符串?
答案 0 :(得分:10)
C ++有一个内置的哈希函数用于此目的 - 它用于所有STL哈希容器。
PS:你也可以创建自己的,只需通过const引用传递字符串并逐个循环遍历字符,将它们添加到整数,然后通过某个值修改:)
答案 1 :(得分:2)
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;
}