Repolode
greg7mdp

greg7mdp/parallel-hashmap

Biblioteca C++ header-only de mapas hash, conjuntos e contêineres B-tree rápidos e econômicos em memória, que substituem os contêineres padrão da STL.

Estrelas
3,223
Forks
313
Issues abertas
4
Último commit
mês passado

O que é?

Parallel Hashmap (phmap) é uma biblioteca C++ com implementações de mapas hash e conjuntos, além de contêineres ordenados baseados em B-tree que servem como alternativas a std::map e std::set. Ela é header-only: basta copiar o diretório parallel_hashmap para um projeto e incluí-lo, sem etapa de compilação. As tabelas hash substituem diretamente std::unordered_map e std::unordered_set, e as B-trees substituem std::map e std::set.

As tabelas hash usam hashing fechado, com os valores armazenados diretamente em um array de memória, o que reduz indireções. A biblioteca se baseia em código adaptado das implementações de swiss table e B-tree do Abseil. As variantes paralelas dividem uma tabela em submapas, reduzindo o pico de uso de memória durante redimensionamentos e permitindo o uso de locks internos para leituras e gravações concorrentes quando um tipo de mutex é fornecido.

Também é possível despejar as flat hash maps em disco e restaurá-las como um único array quando os tipos armazenados são trivialmente copiáveis. A biblioteca oferece headers para declarações antecipadas e dá suporte a busca heterogênea e às APIs do C++11 ao C++17.

Recursos principais

  • 01Header-only, sem necessidade de compilação além de configurar o caminho de inclusão.
  • 02Substitutos diretos de std::unordered_map, std::unordered_set, std::map e std::set.
  • 03Mapas hash paralelos divididos em submapas, com opção de locking interno para acesso concorrente.
  • 04Tabelas flat podem ser despejadas em disco e restauradas como um único array para tipos trivialmente copiáveis.
  • 05Dá suporte a busca heterogênea e a APIs do C++11 ao C++17, como try_emplace.

Casos de uso

  • Substituir std::unordered_map em código C++ sensível a desempenho.
  • Armazenar um número muito grande de entradas quando reduzir o uso de memória é importante.
  • Criar serviços multithread que compartilham uma tabela hash entre threads com locking interno.
  • Persistir rapidamente grandes tabelas de consulta, despejando-as em disco como um array binário.

Início rápido

  1. 1

    Copie o diretório parallel_hashmap para o seu projeto e adicione-o ao caminho de inclusão

  2. 2

    Compile e execute os testes e exemplos com CMake

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

Antes de usar

  • O README recomenda migrar para o projeto gtl, que requer C++20; o desenvolvimento de novos recursos será transferido para lá.
  • Mapas hash planos movem os valores na memória, portanto alterações podem invalidar ponteiros e iteradores para esses valores.
  • É uma biblioteca header-only para C++11, sem instalação empacotada; é necessário copiar o diretório manualmente.

Tópicos

Perguntas frequentes

O que é parallel-hashmap?
Biblioteca C++ header-only de mapas hash, conjuntos e contêineres B-tree rápidos e econômicos em memória, que substituem os contêineres padrão da STL. Parallel Hashmap (phmap) é uma biblioteca C++ com implementações de mapas hash e conjuntos, além de contêineres ordenados baseados em B-tree que servem como alternativas a std::map e std::set. Ela é header-only: basta copiar o diretório parallel_hashmap para um projeto e incluí-lo, sem etapa de compilação. As tabelas hash substituem diretamente std::unordered_map e std::unordered_set, e as B-trees substituem std::map e std::set.
parallel-hashmap é gratuito? Qual é a licença?
parallel-hashmap é open source sob a licença Apache-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
parallel-hashmap ainda é mantido?
Atualizado nos últimos 6 meses. O último commit de parallel-hashmap foi em 10 de set. de 2026.
Para que posso usar parallel-hashmap?
Substituir std::unordered_map em código C++ sensível a desempenho. Armazenar um número muito grande de entradas quando reduzir o uso de memória é importante. Criar serviços multithread que compartilham uma tabela hash entre threads com locking interno. Persistir rapidamente grandes tabelas de consulta, despejando-as em disco como um array binário.
Como instalar parallel-hashmap?
Copie o diretório parallel_hashmap para o seu projeto e adicione-o ao caminho de inclusão Compile e execute os testes e exemplos com CMake: cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
Onde consigo parallel-hashmap?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/greg7mdp/parallel-hashmap

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados