Linux hash.h: использование процедуры быстрого хеширования - PullRequest
0 голосов
/ 10 февраля 2011

Как мы можем использовать hash.h в нашем коде? Я хочу закодировать быструю хеш-таблицу, которая принимает двойное число и выбрасывает указатель. Возможно ли это использовать? Я не вижу каких-либо обычных подпрограмм, связанных с хэшами в нем.

Soham

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

Похоже, что вам нужна структура данных на основе карт , которая внутренне использует хеш-функцию. 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 голосов
/ 10 февраля 2011

Хеш выдаст число, он никогда не выдаст указатель.

Число можно использовать для хранения и поиска индекса элемента в массиве (или аналогичной структуре), ноне имеет ничего общего с фактическим адресом памяти элемента.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...