我們如何在我們的代碼中使用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