Comments 7
В языке Си нет стандартной библиотеки для работы с хеш-таблицами, поэтому обычно используются сторонние решения или создаются собственные. Я попробовал несколько готовых реализаций, но оказалось, что они недостаточно эффективны для моих нужд, так как требовали слишком много памяти.
Так реально бывает?
Поэтому для совместимости C89 началом данных является переменная
data
.
C89? Не верится, что где то существуют компиляторы не поддерживающие ничего новее
add_hash_t add_hash; add_cmp_t add_cmp; find_hash_t find_hash; find_cmp_t find_cmp; del_hash_t del_hash; del_cmp_t del_cmp;
разумеется, подобная реализация проиграет С++ реализации всегда и в любом случае
Я попробовал несколько готовых реализаций, но оказалось, что они недостаточно эффективны для моих нужд
Любой мужчина в возрасте внезапно для себя осознает, что ему уже не хватает синхронизированной хеш-таблицы...
в общем, попробуйте Хеш-таблицу с транзакциями: ее функционал и эффективность точно выше. https://ders.by/cpp/memdb/memdb.html#5.2
У вас получается таблица из строковых значений - доменов. Для таких данных структура данных бор (trie) может подходить сильно лучше, и по памяти и по скорости. Особенно, с учетом ограниченного алфавита.
кстати удаление крайнее как я понял когда 1 елемент удаляется, вобщем толи начало толи конец 128 наносекунд а там выше поменьше времени потребовалось вплоть до 38 наносекунд
там есть какаято супер крутая функция которая делает супер удобный хэш, я недавно читал как раз статью на эту тему
Нестандартная обобщённая хеш-таблица на чистом Си