frozen para C++: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca frozen para C++: Guia Completo de Contêineres em Tempo de Compilação

A biblioteca frozen é uma biblioteca header-only para C++17 e versões posteriores, que fornece contêineres (map, set, string) totalmente inicializados em tempo de compilação (compile-time). Ela permite criar estruturas de dados imutáveis que não exigem alocação dinâmica de memória durante a execução. É a solução ideal para sistemas embarcados, motores de jogos, servidores de alta carga e qualquer código onde desempenho e previsibilidade de tempo de execução sejam críticos.

A ideia principal do frozen é que você define o contêiner como constexpr ou constinit, e todo o trabalho de ordenação, hashing e construção da estrutura de dados ocorre durante a compilação. Em tempo de execução, você obtém um contêiner pronto e otimizado que opera com sobrecarga mínima. Por exemplo, frozen::map usa busca binária em um array ordenado, enquanto frozen::unordered_map usa hashing perfeito (perfect hashing), garantindo acesso O(1) sem colisões.

Para desenvolvedores C++, isso significa: sem memória dinâmica (sem new/delete), sem exceções (noexcept), segurança total em threads (já que os dados são somente leitura) e a possibilidade de colocar contêineres na memória flash de microcontroladores. A biblioteca é amplamente utilizada em projetos do Facebook (agora Meta), em compiladores e em núcleos de sistemas operacionais.

Instalação

A biblioteca frozen é header-only, portanto a instalação se resume a copiar os arquivos de cabeçalho para o seu projeto. A maneira mais simples é usar Conan ou CMake FetchContent. Abaixo estão os comandos exatos para diferentes gerenciadores de pacotes.

Instalação via Conan (recomendado)

conan install frozen/1.1.1@ -r conancenter
# Em seguida, adicione no CMakeLists.txt:
# find_package(frozen REQUIRED)
# target_link_libraries(seu_target frozen::frozen)

Instalação via vcpkg

vcpkg install frozen
# Após a instalação, use:
# find_package(frozen CONFIG REQUIRED)
# target_link_libraries(seu_target frozen::frozen)

Instalação via CMake FetchContent (sem gerenciador de pacotes)

include(FetchContent)
FetchContent_Declare(
  frozen
  GIT_REPOSITORY https://github.com/serge-sans-paille/frozen.git
  GIT_TAG v1.1.1
)
FetchContent_MakeAvailable(frozen)
target_link_libraries(seu_target frozen::frozen)

Instalação manual (header-only)

git clone https://github.com/serge-sans-paille/frozen.git
# Copie a pasta frozen/include/frozen para o seu projeto
# Adicione o caminho de include ao compilador:
# g++ -I/caminho/para/frozen/include seu_arquivo.cpp -std=c++17

Início Rápido: Exemplo Mínimo Funcional

Crie um arquivo exemplo.cpp com o seguinte conteúdo:

#include <iostream>
#include <frozen/unordered_map.h>
#include <frozen/string.h>

int main() {
    // Cria um map em tempo de compilação com hashing perfeito
    constexpr frozen::unordered_map<frozen::string, int, 3> calorias_frutas = {
        {"maca", 95},
        {"banana", 105},
        {"laranja", 62}
    };

    // Busca em tempo de execução — O(1), sem colisões
    std::cout << "Calorias da banana: " << calorias_frutas.at("banana") << "\n";

    // Verifica se a chave existe
    if (auto it = calorias_frutas.find("uva"); it != calorias_frutas.end()) {
        std::cout << "Uva encontrada: " << it->second << "\n";
    } else {
        std::cout << "Uva não encontrada\n";
    }

    // Iteração sobre todos os elementos
    for (auto& [fruta, calorias] : calorias_frutas) {
        std::cout << fruta.data() <<                    

Recommendations