- 参考 ELFhash - 优秀的字符串哈希算法
- ELFHash
- 字符串hash的常用算法
- 原理是通过将字符串散列,计算出一个key(数字型),然后这个key就是对应的数组的下标,然后取出value
- 实现如下
#define MAX_HASH_SIZE 102400 size_t TestHash::Hash(const char* k) { register size_t h = 0; register size_t g; while (*k) { h = (h << 4) + *k++; // hash左移4位,当前字符ASCII存入hash低四位 g = h & 0xf0000000L; // 取出高四位 if (g) { // 如果最高的四位不为0,则说明字符多余7个,如果不处理,再加第九个字符时,第一个字符会被移出 h ^= g >> 24; // 如果对于字符串(a-z 或者 A-Z)就会仅仅影响5-8位,否则会影响5-31位 } h &= ~g; // 清空28-31位 } return h % MAX_HASH_SIZE; // 映射到 [0, MAX_HASH_SIZE] 范围内 }