frozen para C++: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca frozen para C++: Guía completa de contenedores compile-time

La biblioteca frozen es una biblioteca header-only para C++17 y versiones posteriores que proporciona contenedores (map, set, string) completamente inicializados en tiempo de compilación (compile-time). Permite crear estructuras de datos inmutables (immutable) que no requieren asignación dinámica de memoria durante la ejecución. Es la solución ideal para sistemas embebidos, motores de juegos, servidores de alta carga y cualquier código donde el rendimiento y la previsibilidad sean críticos.

La idea principal de frozen es que defines el contenedor como constexpr o constinit, y todo el trabajo de ordenamiento, hashing y construcción de la estructura de datos ocurre durante la compilación. En tiempo de ejecución, obtienes un contenedor listo y optimizado que funciona con una sobrecarga mínima. Por ejemplo, frozen::map utiliza búsqueda binaria sobre un array ordenado, mientras que frozen::unordered_map emplea hashing perfecto (perfect hashing), garantizando acceso O(1) sin colisiones.

Para los desarrolladores de C++, esto significa: sin memoria dinámica (sin new/delete), sin excepciones (noexcept), total seguridad en concurrencia (thread-safety) ya que los datos son de solo lectura, y la posibilidad de colocar contenedores en la memoria flash de microcontroladores. La biblioteca se utiliza activamente en proyectos de Facebook (ahora Meta), en compiladores y en núcleos de sistemas operativos.

Instalación

La biblioteca frozen es header-only, por lo que la instalación se reduce a copiar los archivos de cabecera en tu proyecto. La forma más sencilla es usar Conan o CMake FetchContent. A continuación se muestran los comandos exactos para varios gestores de paquetes.

Instalación mediante Conan (recomendada)

conan install frozen/1.1.1@ -r conancenter
# Luego agrega en CMakeLists.txt:
# find_package(frozen REQUIRED)
# target_link_libraries(tu_proyecto frozen::frozen)

Instalación mediante vcpkg

vcpkg install frozen
# Después de la instalación, usa:
# find_package(frozen CONFIG REQUIRED)
# target_link_libraries(tu_proyecto frozen::frozen)

Instalación mediante CMake FetchContent (sin gestor de paquetes)

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(tu_proyecto frozen::frozen)

Instalación manual (header-only)

git clone https://github.com/serge-sans-paille/frozen.git
# Copia la carpeta frozen/include/frozen en tu proyecto
# Agrega la ruta de include al compilador:
# g++ -I/ruta/a/frozen/include tu_archivo.cpp -std=c++17

Inicio rápido: ejemplo mínimo funcional

Crea un archivo ejemplo.cpp con el siguiente contenido:

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

int main() {
    // Creamos un map en tiempo de compilación con hashing perfecto
    constexpr frozen::unordered_map<frozen::string, int, 3> calorias_fruta = {
        {"manzana", 95},
        {"platano", 105},
        {"naranja", 62}
    };

    // Búsqueda en tiempo de ejecución — O(1), sin colisiones
    std::cout << "Calorías del plátano: " << calorias_fruta.at("platano") << "\n";

    // Verificar si una clave existe
    if (auto it = calorias_fruta.find("uva"); it != calorias_fruta.end()) {
        std::cout << "Uva encontrada: " << it->second << "\n";
    } else {
        std::cout << "Uva no encontrada\n";
    }

    // Iterar sobre todos los elementos
    for (auto& [fruta, calorias] : calorias_fruta) {
        std::cout << fruta.data() <<                    

Recommendations