四个无符号整数的散列函数(C++)

jak*_*gut 10 c++ hash integer

我正在编写一个程序,它产生四个无符号32位整数作为某个函数的输出.我想要散列这四个整数,所以我可以将这个函数的输出与未来的输出进行比较.

我在编写一个像样的散列函数时遇到了麻烦.当我最初编写这段代码时,我简单地添加了四个整数中的每一个,我知道这是不够的.我尝试了其他几种技术,例如转移和添加,但无济于事.我得到一个哈希,但质量很差,而且这个功能产生了大量的碰撞.

散列输出可以是32位或64位整数.所讨论的函数会产生数十亿个哈希值,因此冲突在这里是一个真正的问题,我愿意使用更大的变量来确保尽可能少的冲突.

任何人都可以帮我弄清楚如何编写一个高质量的哈希函数?

Vin*_*vic 8

为什么不将四个整数存储在合适的数据结构中并进行比较呢?除非存储是个问题,否则在这种情况下散列它们的好处对我来说是可疑的.

如果存储是问题,您可以使用此处分析的散列函数之一.