【发布时间】:2014-10-14 05:05:53
【问题描述】:
我正在尝试使用以三个有符号整数作为键的 unordered_map(这是因为我希望使用 tbb 的 concurrent_unordered_map)。
我把这个小(3x16 位 => 64 位)函数放在一起:
// to hash
int64_t result = int16_t(x);
result = int64_t(result << 16) + int16_t(y);
result = int64_t(result << 16) + int16_t(z);
// from hash
int16_t x_ = int16_t(result >> 32);
int16_t y_ = int16_t(result >> 16);
int16_t z_ = int16_t(result & 0xFFFF);
这不起作用,我在这里犯了什么错误?
我的数字分布使得负数或正数更接近于零(通常小于 +/- 2^8),但我想扩展它以使用高达 2^32 的范围,而不是我这里的 2^16 示例。理想情况下,我正在寻找典型范围内的极少碰撞,最好是一个简单的算法。有什么建议吗?
【问题讨论】:
-
怎么不行?