Linux hash.h:使用快速哈希例程

时间:2011-02-10 15:57:41

标签: c linux hash

我们如何在代码中使用hash.h?我想编写一个快速哈希表,它采用一个双精度并喷出一个指针。是否可以使用它。我没有看到任何与哈希相关的常见例程。

Soham

2 个答案:

答案 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)

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

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

希望这有帮助。