先頭へ戻る

pair 解答ページ | Programming Place Plus C++編【標準ライブラリ】 第3章

Programming Place Plus トップページC++編

先頭へ戻る

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 と更新されており、今後も 3年ごとに更新されます。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

問題①

問題① たとえば 100 と “abc” という値のペアを管理する pair があるとき、標準出力へ “100, abc” という形式で出力する汎用的な関数を作成してください。


std::cout には、直接 pair を渡せません。ここでは関数化してみます。

#include <iostream>
#include <utility>
#include <string>

template <typename T1, typename T2>
void PrintPair(std::pair<T1, T2> p)
{
    std::cout << p.first << ", " << p.second << std::endl;
}

int main()
{
    std::pair<int, double> a(10, 3.5);
    std::pair<int, std::string> b(10, "abc");

    PrintPair(a);
    PrintPair(b);
}

実行結果

10, 3.5
10, abc

問題②

問題② pair の pair を試してみてください。


#include <iostream>
#include <utility>
#include <string>

int main()
{
    typedef std::pair<int, std::pair<std::string, std::string> > NamesPair;

    NamesPair a(0, std::make_pair("Tanaka", "Takuya"));

    std::cout << a.first << ", " << a.second.first << " " << a.second.second << std::endl;
}

実行結果

0, Tanaka Takuya

ID のような整数値と、苗字・名前を管理する pair の pair を想定しています。pair の pair は、型名が非常に長くなるので、typedef を使って簡潔な型名を定義するのがセオリーです。

出力している行を見ると分かるように、「a.second.first」のような、一見して意味が分かりづらい記述になるのが大きな欠点でしょうか。


参考リンク


更新履歴

’2014/10/19 新規作成。



第3章のメインページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー