Repolode
greg7mdp

greg7mdp/parallel-hashmap

一套仅含头文件的 C++ 哈希表与 B 树容器库,可替代 std 中的无序和有序容器,速度快、内存占用低。

Star
3,223
Fork
313
未关闭 Issue
4
最近提交
上个月

这是什么?

Parallel Hashmap(phmap)是一个 C++ 库,提供哈希表和哈希集合实现,以及基于 B 树的有序容器,可作为 std::map 和 std::set 的替代。它只有头文件,把 parallel_hashmap 目录复制到项目中即可使用,无需编译。哈希表可直接替换 std::unordered_map 和 std::unordered_set,B 树可替换 std::map 和 std::set。

哈希表采用闭式哈希,数据直接存放在连续内存数组中,减少了间接访问。库基于 Abseil 的 swiss table 和 B 树实现修改而来。并行版本会把表拆分为多个子表,降低扩容时的峰值内存,并在提供互斥锁类型时支持并发读写。

当存储的类型满足 trivially copyable 时,flat 哈希表可以整体导出到磁盘并整块恢复,无需逐元素序列化。库还支持异构查找,提供前向声明头文件,并兼容 C++11 至 C++17 的 API。

核心功能

  • 01仅需头文件,加入包含路径即可使用,无需构建。
  • 02可直接替换 std::unordered_map、std::unordered_set、std::map 和 std::set。
  • 03并行哈希表将数据分到多个子表,可选择传入互斥锁类型以支持并发读写。
  • 04对 trivially copyable 类型,flat 哈希表可整体导出到磁盘并快速恢复。
  • 05支持异构查找,并兼容 C++11 到 C++17 的 API,如 try_emplace。

适用场景

  • 在对性能敏感的 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 建议迁移到需要 C++20 的 gtl 项目,且未来的功能开发将转向该项目。
  • flat 哈希表会在内存中移动元素,修改容器时指向其内容的指针和迭代器可能失效。
  • 这是一个 C++11 纯头文件库,没有打包安装方式,需要手动复制目录。

标签

常见问题

parallel-hashmap 是什么?
一套仅含头文件的 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 还在维护吗?
半年内有更新。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

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目