Repolode
greg7mdp

greg7mdp/parallel-hashmap

Header-only библиотека на C++ с быстрыми и экономичными по памяти хеш-таблицами и B-деревьями — альтернативами контейнерам std.

Звёзды
3,223
Форки
313
Открытые issues
4
Последний коммит
в прошлом месяце

Что это?

Parallel Hashmap (phmap) — библиотека на C++ с реализациями хеш-таблиц и множеств, а также упорядоченными контейнерами на основе B-деревьев — альтернативами std::map и std::set. Библиотека состоит только из заголовочных файлов: достаточно скопировать каталог parallel_hashmap в проект и подключить его, без этапа сборки. Хеш-таблицы можно напрямую подставить вместо std::unordered_map и std::unordered_set, а B-деревья — вместо std::map и std::set.

В хеш-таблицах используется закрытая адресация: значения хранятся непосредственно в массиве памяти, что сокращает число косвенных обращений. В основе библиотеки — код, адаптированный из реализаций swiss table и B-деревьев в Abseil. Параллельные варианты разбивают таблицу на подтаблицы, что снижает пиковое потребление памяти при изменении размера и позволяет использовать внутреннюю блокировку для параллельного чтения и записи, если передать тип мьютекса.

Плоские хеш-таблицы также можно сохранить на диск и восстановить как единый массив, если хранящиеся типы тривиально копируемы. В библиотеке есть заголовки с предварительными объявлениями; поддерживаются гетерогенный поиск и API от C++11 до C++17.

Ключевые возможности

  • 01Библиотека состоит только из заголовочных файлов; для подключения не нужна сборка.
  • 02Прямая замена std::unordered_map, std::unordered_set, std::map и std::set.
  • 03Параллельные хеш-таблицы разбиваются на подтаблицы; для параллельного доступа можно включить внутреннюю блокировку.
  • 04Плоские таблицы для тривиально копируемых типов можно сохранить на диск и восстановить как единый массив.
  • 05Поддерживаются гетерогенный поиск и API от C++11 до C++17, включая try_emplace.

Сценарии использования

  • Замена std::unordered_map в требовательном к производительности коде на C++.
  • Хранение очень большого числа элементов, когда важно сократить расход памяти.
  • Создание многопоточных сервисов, в которых потоки совместно используют хеш-таблицу с внутренней блокировкой.
  • Быстрое сохранение больших таблиц поиска на диск в виде бинарного массива.

Быстрый старт

  1. 1

    Скопируйте каталог parallel_hashmap в проект и добавьте его в путь поиска заголовочных файлов

  2. 2

    Соберите и запустите тесты и примеры с помощью CMake

    cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build

Что важно знать

  • В README рекомендуется перейти на проект gtl, которому требуется C++20; дальнейшая разработка функций будет вестись там.
  • Плоские хеш-таблицы перемещают значения в памяти, поэтому при изменении таблицы указатели и итераторы на эти значения могут стать недействительными.
  • Это header-only библиотека для C++11 без готового пакета для установки; каталог нужно скопировать вручную.

Темы

Частые вопросы

Что такое parallel-hashmap?
Header-only библиотека на C++ с быстрыми и экономичными по памяти хеш-таблицами и B-деревьями — альтернативами контейнерам std. Parallel Hashmap (phmap) — библиотека на C++ с реализациями хеш-таблиц и множеств, а также упорядоченными контейнерами на основе B-деревьев — альтернативами std::map и std::set. Библиотека состоит только из заголовочных файлов: достаточно скопировать каталог parallel_hashmap в проект и подключить его, без этапа сборки. Хеш-таблицы можно напрямую подставить вместо std::unordered_map и std::unordered_set, а B-деревья — вместо std::map и std::set.
parallel-hashmap можно использовать бесплатно? Какая у него лицензия?
parallel-hashmap распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
parallel-hashmap всё ещё поддерживается?
Обновлялся за последние 6 месяцев. Последний коммит в parallel-hashmap — 10 сент. 2026 г..
Для чего можно использовать parallel-hashmap?
Замена std::unordered_map в требовательном к производительности коде на C++. Хранение очень большого числа элементов, когда важно сократить расход памяти. Создание многопоточных сервисов, в которых потоки совместно используют хеш-таблицу с внутренней блокировкой. Быстрое сохранение больших таблиц поиска на диск в виде бинарного массива.
Как установить parallel-hashmap?
Скопируйте каталог parallel_hashmap в проект и добавьте его в путь поиска заголовочных файлов Соберите и запустите тесты и примеры с помощью CMake: cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
Где скачать parallel-hashmap?
Исходный код и инструкции по установке — на GitHub: https://github.com/greg7mdp/parallel-hashmap

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты