将32位数字快速散列到数组中

时间:2016-02-26 10:09:53

标签: c++ hash

我正在寻找一个快速关联数组,它允许我将32位数字映射到数组中的某个元素,最好是一个唯一的数字,这样就不存在任何冲突。这些数字只有几千个,但它们可以在32位范围内的任何地方。

我当然可以使用 std :: map std :: unordered_map ,但我希望有一个完美的哈希解决方案来解决这个问题。加快了很多事情。只有几千个,它也可以只在数组上使用std :: find并存储键值的 std :: pair 也是有效的。

作为参考我想要做的是将消息ID映射到函数指针表。

1 个答案:

答案 0 :(得分:0)

如果你重读了你的问题,它可能会自行回答。鉴于完全随机的32位整数集,您基本上会问如何将它们转换为32位整数。如果它们真的是随机的,你不能容忍任何冲突,那么只有一个答案:hash(x)= x。

当然,这个答案对你没什么好处。另一种选择是利用有关消息ID性质的知识。它们几乎是连续的吗?哈希(x)= x - someConstant。你能扔掉一些东西吗?哈希(x)=(x& ~0xff)>>也许这会给你一些想法。