🛠Tools🔥

Tessil、C++用高速ハッシュマップライブラリ hopscotch-map を公開──std::unordered_map を上回る性能

オープンアドレッシングとホップスコッチハッシュを採用し、メモリ効率と実行速度を両立させたヘッダーオンリーの C++ ライブラリ。
リリース: 2025-11-02 · 読了 3

記事の要約

1. 核心(What)

  • Tessil が提供する C++ 用ハッシュマップ/セット実装で、ホップスコッチハッシュアルゴリズムを採用。
  • 標準ライブラリの std::unordered_map と比較して、メモリ消費量を抑えつつ高速なルックアップを実現。
  • tsl::hopscotch_map 等のクラスを提供し、ハッシュ関数の特性に応じた prime/power-of-two の成長ポリシーを選択可能。
  • ヘッダーオンリーで提供され、CMake による統合もサポート。

2. 影響(Why)

  • 標準マップの代替候補: std::unordered_map のメモリオーバーヘッドやキャッシュ性能に課題がある場合、置換のみで高速化が見込める。
  • 国内 SaaS 開発への影響: C++ を用いた高頻度取引システムやゲームエンジン開発を行う国内中規模組織において、メモリ制約下での検索性能向上に寄与する。

3. 根拠・詳細(How)

  • メモリレイアウトと衝突解決: オープンアドレッシング手法により、ノードごとのポインタ追跡を減らしキャッシュ効率を最大化。google::dense_hash_map と同等のメモリ効率を実現。
  • 異種ルックアップの実装: std::unique_ptr<foo> をキーとするマップに対し、foo* 型の引数で find を実行可能。キーの構築コストを回避する設計。

4. 展望・課題(Next)

  • DoS 攻撃への耐性: ハッシュ衝突を意図的に引き起こす DoS 攻撃への耐性が必要な場合は、LessThanComparable を要求する bhopscotch シリーズの利用を推奨。