導入
「名前と年齢」「x と y」のように、複数の値をひとまとめにして返したり持ち歩いたりしたい――そのたびに struct を作らずに済む軽量な組が std::pair(2つ)と std::tuple(3つ以上)です。STL の各所で使われます。
説明
std::pair<A, B> は2つの値の組です。.first .second で取り出します。作るときは make_pair か {} が使えます。
#include <iostream>
#include <string>
#include <utility> // pair
using namespace std;
pair<string, int> makeUser() {
return { "たろう", 20 }; // 2つの値をまとめて返す
}
int main() {
pair<string, int> u = makeUser();
cout << u.first << " / " << u.second << endl; // たろう / 20
auto p = make_pair(3, 4); // auto で受けると楽
cout << p.first + p.second << endl; // 7
return 0;
}
3つ以上の値は std::tuple です。取り出しは std::get<番号>(t)、または「構造化束縛」(第17章)で一気に分解できます。
flowchart LR t["tuple<string, int, double>"] t --> a["get<0> → 名前"] t --> b["get<1> → 年齢"] t --> c["get<2> → 身長"]
#include <iostream>
#include <string>
#include <tuple>
using namespace std;
int main() {
tuple<string, int, double> t = { "はな", 25, 160.5 };
cout << get<0>(t) << endl; // はな
cout << get<1>(t) << endl; // 25
cout << get<2>(t) << endl; // 160.5
return 0;
}
まとめ
pair は2つ、tuple は3つ以上の値の組です。「関数から複数の値を返したい」ときに手軽です。取り出しは pair が .first/.second、tuple が get<番号>。分解には構造化束縛(第17章)が便利です。