size_t hash(const std::string data) {
size_t h(0);
for (int i=0; i<data.length(); i++){
h = (h << (31-i) ^ (h >> i) ^ data[i]);
}
h = h%hashsize;
return h;
}
答案 0 :(得分:3)
它是std::string
的哈希函数,表面上适用于TR1和C ++ 11的std::unordered_map<>
,std::unordered_set<>
等。也就是说,它试图创建一个as-unique-as-用于哈希表的给定size_t
的可能std::string
值。
话虽如此,这是一个糟糕的哈希函数。 unordered_map<>
,unordered_set<>
等附带的任何标准库实现都将带有标准库字符串的内置哈希函数,这些函数具有比此更好的实现。
编辑:(回复评论)<<
向左移位,>>
向右移位,^
为按位异或,所有本维基百科条目中简要讨论了这些内容:Bitwise operation。