如何使用现有的散列整数对散列表进行索引

How do I use an existing hashed integer to index a hash table?

本文关键字:列表 索引 整数 何使用      更新时间:2023-10-16

我目前正在使用Boost for c++,并试图使用CRC32实现无序映射(又名哈希表)。据我所知,它将以字符串作为初始键,对其进行散列,并应用另一个操作,以便它适合桶的数量。

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

谢谢你的帮助!

使用基于c语言的模数运算符——%:

int hashtableIndex = hashValue % hashtableSize;

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

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

int hashtableIndex = hashValue & (hashtableSize - 1);