我们如何在我们的代码中使用hash.h?我想编写一个快速哈希表,它需要一个双精度型并且喷出一个指针。有没有可能使用它。我没有看到任何与散列相关的常规例程。Linux hash.h:使用快速散列例程
Soham
我们如何在我们的代码中使用hash.h?我想编写一个快速哈希表,它需要一个双精度型并且喷出一个指针。有没有可能使用它。我没有看到任何与散列相关的常规例程。Linux hash.h:使用快速散列例程
Soham
这似乎是你想要的是一个基于地图的数据结构内部使用散列函数。 hash.h
只提供后者,但有一些库可以提供数据结构。使用libHX(其可在所有主要Linux发行版)来映射双重的指针的例子(错误处理省去为了简洁),使用特定的哈希函数:
#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
的散列函数似乎非常小,可能不会提供良好的属性。
哈希会吐出一个数字,它永远不会吐出的指针。
该数字可用于存储和查找数组(或类似结构)中项目的索引,但与项目的实际内存地址无关。
希望这会有所帮助。
埃德温是可能的任何其他数据结构,实现类似的东西。我想要一个(理想的)O(1)搜索来寻找另一个数据结构(比如一个结构) – Soham 2011-02-10 16:13:21
这个`hash.h`? http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/include/linux/hash.h – kennytm 2011-02-10 16:03:41
是的......右 – Soham 2011-02-10 16:14:28