我有一个从长度1到长度5的任何地方的字符串,需要散列它,具有良好的性能和最小的冲突。有什么建议? (我不需要安全保障)
答案 0 :(得分:0)
/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;
}
对于上述代码中的任何错误类型,请注意,它尚未编译或测试。这有最小的碰撞(没有),我会猜测相当不错的性能,而不是那么好的质量。质量我指的是彼此接近的值的分离以及整个密钥空间的使用。
当然还有一系列常规加密哈希函数可供选择,但我从你的问题中得出这些并不是你的目标。