Repolode
greg7mdp

greg7mdp/parallel-hashmap

Biblioteca de C++ header-only con mapas hash, conjuntos y contenedores B-tree rápidos y eficientes en memoria, como alternativa a los contenedores estándar ordenados y no ordenados.

Estrellas
3,223
Forks
313
Issues abiertos
4
Último commit
el mes pasado

¿Qué es?

Parallel Hashmap (phmap) es una biblioteca de C++ que ofrece implementaciones de mapas hash y conjuntos, además de contenedores ordenados basados en B-tree que sirven como alternativa a std::map y std::set. Solo incluye headers: basta con copiar el directorio parallel_hashmap en un proyecto e incluirlo, sin necesidad de compilar. Las tablas hash sustituyen directamente a std::unordered_map y std::unordered_set, y los B-trees, a std::map y std::set.

Las tablas hash usan hashing cerrado y almacenan los valores directamente en un array de memoria, lo que reduce las indirecciones. La biblioteca se basa en código adaptado de las implementaciones de swiss table y B-tree de Abseil. Las variantes paralelas dividen la tabla en submapas, lo que reduce el pico de memoria durante el redimensionamiento y permite el bloqueo interno para lecturas y escrituras concurrentes cuando se proporciona un tipo de mutex.

También se pueden volcar los mapas hash planos a disco y restaurarlos como un único array si los tipos almacenados son trivially copyable. La biblioteca incluye headers de declaración adelantada y admite búsquedas heterogéneas y APIs de C++11 a C++17.

Funciones clave

  • 01Solo requiere incluir los headers; no hace falta compilar.
  • 02Sustitutos directos de std::unordered_map, std::unordered_set, std::map y std::set.
  • 03Los mapas hash paralelos se dividen en submapas y ofrecen bloqueo interno opcional para el acceso concurrente.
  • 04Las tablas planas se pueden volcar a disco y restaurar como un único array si contienen tipos trivially copyable.
  • 05Admite búsquedas heterogéneas y APIs de C++11 a C++17, como try_emplace.

Casos de uso

  • Sustituir std::unordered_map en código C++ donde el rendimiento sea importante.
  • Almacenar cantidades muy grandes de entradas cuando es importante reducir el uso de memoria.
  • Crear servicios multihilo que compartan una tabla hash entre varios threads con bloqueo interno.
  • Persistir rápidamente tablas de búsqueda grandes volcándolas a disco como un array binario.

Inicio rápido

  1. 1

    Copia el directorio parallel_hashmap en tu proyecto y añádelo a la ruta de inclusión

  2. 2

    Compila y ejecuta las pruebas y los ejemplos con CMake

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

Antes de usarlo

  • El README recomienda migrar al proyecto gtl, que requiere C++20; el desarrollo de futuras funciones se trasladará allí.
  • Los mapas hash planos mueven los valores en memoria, por lo que las modificaciones pueden invalidar los punteros y los iteradores que apuntan a ellos.
  • Es una biblioteca header-only para C++11 y no ofrece una instalación empaquetada; debes copiar el directorio manualmente.

Temas

Preguntas frecuentes

¿Qué es parallel-hashmap?
Biblioteca de C++ header-only con mapas hash, conjuntos y contenedores B-tree rápidos y eficientes en memoria, como alternativa a los contenedores estándar ordenados y no ordenados. Parallel Hashmap (phmap) es una biblioteca de C++ que ofrece implementaciones de mapas hash y conjuntos, además de contenedores ordenados basados en B-tree que sirven como alternativa a std::map y std::set. Solo incluye headers: basta con copiar el directorio parallel_hashmap en un proyecto e incluirlo, sin necesidad de compilar. Las tablas hash sustituyen directamente a std::unordered_map y std::unordered_set, y los B-trees, a std::map y std::set.
¿parallel-hashmap es gratuito? ¿Qué licencia tiene?
parallel-hashmap es open source bajo la licencia Apache-2.0. Revisa los términos de la licencia antes de usarlo en productos comerciales.
¿parallel-hashmap sigue mantenido?
Actualizado en los últimos 6 meses. El último commit de parallel-hashmap fue el 10 sept 2026.
¿Para qué puedo usar parallel-hashmap?
Sustituir std::unordered_map en código C++ donde el rendimiento sea importante. Almacenar cantidades muy grandes de entradas cuando es importante reducir el uso de memoria. Crear servicios multihilo que compartan una tabla hash entre varios threads con bloqueo interno. Persistir rápidamente tablas de búsqueda grandes volcándolas a disco como un array binario.
¿Cómo se instala parallel-hashmap?
Copia el directorio parallel_hashmap en tu proyecto y añádelo a la ruta de inclusión Compila y ejecuta las pruebas y los ejemplos con CMake: cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
¿Dónde consigo parallel-hashmap?
El código fuente y las instrucciones de instalación están en GitHub: https://github.com/greg7mdp/parallel-hashmap

Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.

Proyectos relacionados