任何人都能说出这个函数的第4行是做什么的!

时间:2011-04-15 05:53:03

标签: c++

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;
}

1 个答案:

答案 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