我必须编写自己的哈希函数。如果我只想制作一个简单的哈希函数,将字符串中的每个字母映射到一个数值(即 a=1,b=2,c=3,...),有没有办法可以在一个字符串,而不必先将其转换为 c 字符串来查看每个单独的字符?有没有更有效的哈希字符串方法?
最佳答案
根据个人经验,我知道这很有效并且产生了良好的分布。 (抄袭自http://www.cse.yorku.ca/~oz/hash.html):
djb2
这个算法 (k=33) 是 dan bernstein 多年前在 comp.lang.c 中首次报道的。该算法的另一个版本(现在被 bernstein 青睐)使用 xor:hash(i) = hash(i - 1) * 33 ^ str[i];数字 33 的魔力(为什么它比许多其他常数工作得更好,无论是否素数)从未得到充分解释。
unsigned long hash(unsigned char *str) {
unsigned long hash = 5381;
int c;
while (c = *str++) {
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
}
return hash;
}
关于c++ - 如何使用 c++ 将字符串散列为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535284/