Ir para o conteúdo

Última atualização:2026-10-12

Saída rápida de contêineres STL em C++

Fiz algumas modificações no código do professor Wu — clique aqui para ir direto ao código

Entrada:

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

O resultado exibido é:

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

Como integrar

Basta baixar o output_container.h para o projeto e incluí-lo:

#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;
}

Quais contêineres são suportados

vector, list, set, map, multiset, multimap, a família unordered, pair, além de qualquer tipo próprio iterável (basta implementar begin/end); contêineres aninhados também imprimem direto.

O princípio em uma frase

O núcleo é especializar operator<< para os contêineres: usa SFINAE (void_t detectando begin()/end()) para decidir «é iterável?» — se sim, saída elemento a elemento; se não, segue o fluxo de saída original. Quem tiver interesse, leia o código-fonte direto: menos de duzentas linhas, ótimo material para aprender o idiom de detecção de expressões.

Imprimir contêineres ao depurar é necessidade básica; essa ferramentinha poupa incontáveis loops for escritos à mão. Dúvidas? Deixe nos comentários~

Tópicos relacionados

Comentários