2011-02-10 88 views
0

我们如何在我们的代码中使用hash.h?我想编写一个快速哈希表,它需要一个双精度型并且喷出一个指针。有没有可能使用它。我没有看到任何与散列相关的常规例程。Linux hash.h:使用快速散列例程

Soham

+0

这个`hash.h`? http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/include/linux/hash.h – kennytm 2011-02-10 16:03:41

+0

是的......右 – Soham 2011-02-10 16:14:28

回答

2

这似乎是你想要的是一个基于地图的数据结构内部使用散列函数。 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的散列函数似乎非常小,可能不会提供良好的属性。

0

哈希会吐出一个数字,它永远不会吐出的指针。

该数字可用于存储和查找数组(或类似结构)中项目的索引,但与项目的实际内存地址无关。

希望这会有所帮助。

+0

埃德温是可能的任何其他数据结构,实现类似的东西。我想要一个(理想的)O(1)搜索来寻找另一个数据结构(比如一个结构) – Soham 2011-02-10 16:13:21