小字符串哈希函数

时间:2013-11-05 16:59:12

标签: c++ string hash hashcode

我有一个从长度1到长度5的任何地方的字符串,需要散列它,具有良好的性能和最小的冲突。有什么建议? (我不需要安全保障)

2 个答案:

答案 0 :(得分:0)

你有Linux吗?尝试/bin/gperf它会从密钥集生成一个完美的哈希函数。

答案 1 :(得分:0)

根据您的情况,您可能需要某种类型的哈希。但是,如果您需要的只是将它们分开,那么std::hash()就会浮现在脑海中......

另一种选择是:

long long hash(const std::string &val) {
    long long hash = 0;
    memcpy(reinterpret_cast<char*>(&hash), val.c_str(), std::min(sizeof(hash), val.length());
    return hash;
}

对于上述代码中的任何错误类型,请注意,它尚未编译或测试。这有最小的碰撞(没有),我会猜测相当不错的性能,而不是那么好的质量。质量我指的是彼此接近的值的分离以及整个密钥空间的使用。

当然还有一系列常规加密哈希函数可供选择,但我从你的问题中得出这些并不是你的目标。