我们如何在代码中使用hash.h?我想编写一个快速哈希表,它采用一个双精度并喷出一个指针。是否可以使用它。我没有看到任何与哈希相关的常见例程。
Soham
答案 0 :(得分:2)
看起来你想要的是一个内部使用哈希函数的基于地图的数据结构。 hash.h
只提供后者,但是有一些库可以为您提供数据结构。使用libHX(在所有主要的Linux发行版中都可用)将一个double映射到一个指针(为了简洁而省略错误处理)的示例,使用特定的散列函数:
#include <stdio.h>
#include <libHX/map.h>
static unsigned long linux_hash(const void *p, size_t chars)
{
// replace return 0 by algorithm from hash.h
return 0;
}
static const struct HXmap_ops ops = {
.k_hash = linux_hash,
};
int main(void)
{
struct HXmap *map;
double i;
map = HXmap_init5(HXMAPT_DEFAULT, HXMAP_CKEY, &ops, sizeof(double), 0);
i = 3.141;
HXmap_add(map, &i, main);
i = 3.141/2;
HXmap_add(map, &i, map);
i = 3.141;
printf("3.141 maps to %p\n", HXmap_get(map, &i));
i = 3.141/2;
printf("pi/2 maps to %p\n", HXmap_get(map, &i));
return 0;
}
如果未指定k_hash,则jenkins3将用作合理的默认值。来自Linux hash.h
的哈希函数似乎非常小,可能无法提供良好的属性。
答案 1 :(得分:0)
哈希会吐出一个数字,它永远不会吐出一个指针。
该数字可用于存储和查找数组(或类似结构)中项目的索引,但它与项目的实际内存地址无关。
希望这有帮助。