c - 使用 GMP 类型 (mpf_t/mpz_t) 作为哈希表中的键

标签 c hash byte gmp

我需要使用 GMP mpf_t/mpz_t 作为哈希表中的键。 是否有任何有效的方法来访问数字表示的原始字节,以便我可以对它们运行哈希函数?

我已经阅读了文档,但我现在并没有真正觉得自己变聪明了。 ;)

谢谢! 问候, 伊顿

最佳答案

出于好奇,既然可以按值排序,为什么还要使用散列?比较速度非常快,因为它比较从 MSB 到 LSB 的字节/分支,一旦不同就返回结果。

您可以使用依赖于平台的 mp_limb_t 类型访问原始数据。 mpz_tmpf_t 都有一个 mp_limb_t vector 存储在 _mp_d 指定的地址,其中包含重要肢体的数量由 _mp_size 字段的绝对值给出。 (定义在 gmp.h 中)

当然,如果哈希函数依赖于8位字节 vector ,则需要转换肢 vector 。幸运的是,mp_limb_t 中的位数 - GMP_LIMB_BITS - 在任何健全的平台上总是可以被 8 整除。

关于c - 使用 GMP 类型 (mpf_t/mpz_t) 作为哈希表中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19766874/

相关文章:

c - 在 Lua 中从 C 注册函数时如何将模块嵌套到命名空间中?

c - tic-tac-toe 使用 opencv 但我可以在识别游戏板时停止

ruby - 从哈希数组中检索特定的哈希键值

javascript - 使用ajax向ruby Controller 发送数据

angularjs - Google 机器人无法以 html5 模式获取 AngularJS 网站

int - C# 3 字节整数

c# - 如何处理 byte[] 中的空值

c - ncurses 不解释键

go - 如何打印结构的 []byte 成员字符串

c - 使用带有 va_arg 的自定义类型