Repolode
greg7mdp

greg7mdp/parallel-hashmap

標準の unordered/ordered コンテナを置き換えられる、高速でメモリ効率に優れたハッシュマップ、セット、B-tree コンテナを提供するヘッダーオンリーの C++ ライブラリ。

スター
3,223
フォーク
313
未解決の Issue
4
最終コミット
先月

これは何?

Parallel Hashmap(phmap)は、ハッシュマップとセットの実装に加え、std::map や std::set の代替となる B-tree ベースの順序付きコンテナを提供する C++ ライブラリです。ヘッダーオンリーなので、parallel_hashmap ディレクトリをプロジェクトにコピーしてインクルードするだけで使え、ビルド工程は必要ありません。ハッシュテーブルは std::unordered_map と std::unordered_set のドロップイン置き換えとして、B-tree は std::map と std::set の置き換えとして使えます。

ハッシュテーブルには値をメモリ配列に直接格納するクローズドハッシュ方式を採用し、間接参照を減らしています。ライブラリは Abseil の Swiss Table および B-tree の実装をベースにしたコードを採用しています。並列版ではテーブルを複数のサブマップに分割するため、リサイズ時のピークメモリを抑えられます。また、mutex 型を指定すれば内部ロックが有効になり、並行読み書きが可能です。

flat hash map は、格納する型が trivially copyable であれば、ディスクに単一配列としてダンプし、復元することもできます。前方宣言用ヘッダーも用意されており、異種型検索と C++11 から C++17 までの API をサポートしています。

主な機能

  • 01ヘッダーオンリーで、インクルードパスを設定する以外にビルドは不要です。
  • 02std::unordered_map、std::unordered_set、std::map、std::set のドロップイン置き換えとして使えます。
  • 03並列ハッシュマップはテーブルをサブマップに分割し、必要に応じて内部ロックによる並行アクセスをサポートします。
  • 04flat table は、trivially copyable な型であれば単一配列としてディスクにダンプし、復元できます。
  • 05異種型検索と、try_emplace などを含む C++11 から C++17 までの API をサポートします。

ユースケース

  • パフォーマンスが重要な C++ コードで std::unordered_map を置き換える。
  • メモリ使用量を抑えながら、非常に多くのエントリーを格納する。
  • 内部ロックを使い、複数スレッドでハッシュテーブルを共有するマルチスレッドサービスを構築する。
  • 大規模な検索テーブルをバイナリ配列としてディスクにダンプし、高速に永続化する。

クイックスタート

  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 プロジェクトへの移行を推奨しています。gtl には C++20 が必要で、今後の機能開発はそちらに移行します。
  • フラットハッシュマップはメモリ内で値を移動するため、変更操作によって内部のポインターやイテレーターが無効になる場合があります。
  • C++11 対応のヘッダーオンリーライブラリで、パッケージ化されたインストール方法はありません。ディレクトリを手動でコピーする必要があります。

トピック

よくある質問

parallel-hashmap とは?
標準の unordered/ordered コンテナを置き換えられる、高速でメモリ効率に優れたハッシュマップ、セット、B-tree コンテナを提供するヘッダーオンリーの C++ ライブラリ。 Parallel Hashmap(phmap)は、ハッシュマップとセットの実装に加え、std::map や std::set の代替となる B-tree ベースの順序付きコンテナを提供する C++ ライブラリです。ヘッダーオンリーなので、parallel_hashmap ディレクトリをプロジェクトにコピーしてインクルードするだけで使え、ビルド工程は必要ありません。ハッシュテーブルは std::unordered_map と std::unordered_set のドロップイン置き換えとして、B-tree は std::map と std::set の置き換えとして使えます。
parallel-hashmap は無料で使えますか?ライセンスは?
parallel-hashmap は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
parallel-hashmap は今もメンテナンスされていますか?
半年以内に更新あり。parallel-hashmap の最終コミットは 2026年9月10日 です。
parallel-hashmap は何に使えますか?
パフォーマンスが重要な C++ コードで std::unordered_map を置き換える。 メモリ使用量を抑えながら、非常に多くのエントリーを格納する。 内部ロックを使い、複数スレッドでハッシュテーブルを共有するマルチスレッドサービスを構築する。 大規模な検索テーブルをバイナリ配列としてディスクにダンプし、高速に永続化する。
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 をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト