我目前正在使用Boost for C ++,并且正在尝试使用CRC32实现无序映射(也就是哈希表)。据我所知,它将一个字符串作为初始键,哈希它,并应用另一个操作,以便它适合桶的数量。
虽然在我的情况下,我想事先散列字符串键(在Boost中使用单独的CRC函数),然后使用该ID索引表。我需要帮助的问题是CRC32哈希具有2 ^ 32个潜在值,我怀疑我将需要一个具有2 ^ 32个元素的表。在这种情况下我该怎么办?
感谢您的帮助!
答案 0 :(得分:2)
在基于C语言中使用模数运算符 - %
:
int hashtableIndex = hashValue % hashtableSize;
但请注意,在C ++中,结果的符号是“实现定义的”,如果hashValue为负,则可以为负。因此,在执行%
操作之前,可能需要关闭hashValue中的符号位。
另请注意,如果已知hashtableSize
是2的幂,则可以简单地屏蔽hashValue
以获取索引:
int hashtableIndex = hashValue & (hashtableSize - 1);