Saltar a contenido

Última actualización:2026-10-12

Salida rápida de contenedores STL en C++

Modifiqué un poco el código del profesor Wu — haz clic aquí para ir directo al código

Entrada:

map<int, int> mp{
            {1, 1},
            {2, 4},
            {3, 9}};
    cout << mp << endl;

La salida muestra:

{ 1 => 1, 2 => 4, 3 => 9 }

Cómo integrarlo

Descarga output_container.h al proyecto e inclúyelo, y listo:

#include "output_container.h"

int main() {
    std::vector<int> vec{1, 2, 3, 4, 5};
    std::set<std::string> names{"light", "city"};
    std::cout << vec << std::endl;   // { 1, 2, 3, 4, 5 }
    std::cout << names << std::endl; // { city, light }
    return 0;
}

Qué contenedores soporta

vector, list, set, map, multiset, multimap, la familia unordered, pair, y cualquier tipo propio iterable (basta con implementar begin/end); los contenedores anidados también se imprimen directamente.

El principio en una frase

El núcleo es especializar operator<< para los contenedores: con SFINAE (void_t detectando begin()/end()) se decide «¿es iterable?» — si sí, salida elemento a elemento; si no, se usa el flujo de salida original. Si te interesa, lee el código fuente directamente: menos de doscientas líneas, material excelente para aprender el idiom de detección de expresiones.

Imprimir contenedores al depurar es una necesidad real; esta pequeña herramienta ahorra incontables bucles for escritos a mano. ¿Dudas? Nos vemos en los comentarios~

Temas relacionados

Comentarios