纯头文件的 C++14 无锁环形缓冲队列,用于线程间以极低延迟传递消息。
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
将 parallel_hashmap 目录复制到项目中并加入包含路径
- 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 数据每日更新。
相关项目
一个 C++11 单头文件库,用于构建 HTTP/HTTPS 服务端和客户端,采用阻塞式 socket I/O。
一个快速、易用、类 Flask 路由风格的 C++ 微框架,用于构建 HTTP 和 WebSocket 服务。
纯头文件的 C++ 库,快速且精确地把字符串解析为 float、double 和整数,实现 from_chars 接口。
基于 SIMD 与 SWAR 指令加速的字符串库,支持 C、C++、Python、Rust 等多种语言,涵盖搜索、哈希、排序与编辑距离。
一个仅头文件的 C++11 库,用类似 STL 的语法在 C++ 中解析、构造、操作和序列化 JSON。