コンテンツにスキップ

最終更新:2026-10-12

C++ STL コンテナの手軽な出力

呉先生のコードに手を加えました——ここをクリックしてコードへ直接アクセス

入力:

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

出力結果は次のとおりです:

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

導入方法

output_container.h をプロジェクトにダウンロードしてインクルードするだけです:

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

対応コンテナ

vector、list、set、map、multiset、multimap、unordered 系、pair、さらに begin/end を実装していれば任意の反復可能なカスタム型にも対応し、ネストしたコンテナもそのまま出力できます。

原理を一言で

要はコンテナに対して operator<< を特殊化すること:SFINAE(void_t で begin()/end() を検出)で「反復可能かどうか」を判断し、可能なら要素ごとに出力し、不可能なら元の出力ストリームに流します。興味があればぜひソースを直接読んでください。200 行弱で、式検出イディオムを学ぶ良い教材です。

デバッグ時のコンテナ出力は必需品で、この小道具は手書き for ループを無数に省いてくれます。質問があればコメント欄でどうぞ〜

関連トピック

コメント