如何使用现有的散列整数来索引哈希表?

时间:2011-10-29 18:19:13

标签: c++ boost hash unordered-map crc32

我目前正在使用Boost for C ++,并且正在尝试使用CRC32实现无序映射(也就是哈希表)。据我所知,它将一个字符串作为初始键,哈希它,并应用另一个操作,以便它适合桶的数量。

虽然在我的情况下,我想事先散列字符串键(在Boost中使用单独的CRC函数),然后使用该ID索引表。我需要帮助的问题是CRC32哈希具有2 ^ 32个潜在值,我怀疑我将需要一个具有2 ^ 32个元素的表。在这种情况下我该怎么办?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在基于C语言中使用模数运算符 - %

int hashtableIndex = hashValue % hashtableSize;

但请注意,在C ++中,结果的符号是“实现定义的”,如果hashValue为负,则可以为负。因此,在执行%操作之前,可能需要关闭hashValue中的符号位。

另请注意,如果已知hashtableSize是2的幂,则可以简单地屏蔽hashValue以获取索引:

int hashtableIndex = hashValue & (hashtableSize - 1);