2011-02-10 39 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