c++ - 如何使用现有的哈希整数来索引哈希表?

标签 c++ boost hash unordered-map crc32

我目前正在使用 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);

关于c++ - 如何使用现有的哈希整数来索引哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940771/

相关文章:

python - PyQt5:使用自定义信号时 int 对象的错误转换

c++ - Tic Tac Toe游戏,用C++发行,具有再次播放功能

Boost::spirit 序列未得到解析

hash - 加密/bcrypt : hashedPassword is not the hash of the given password

algorithm - 电子邮件的 10 个字符散列

javascript - javascript中列表列表的哈希值

c++ - 在 Google Mock 上调用重载函数

c++ - 将十六进制字符串转换为字节数组

c++ - 使用 boost::range 创建一个 unindent 算法

c++ - boost::locale::to_lower 抛出 bad_cast 异常