【C++】std::pair, tupleの基本的な使い方
2つの異なる型の値を「組」として保持するpairクラスについて使い方をまとめます. 類似のもので,より一般にN個の異なる型の値を扱うtupleクラスがあるのでこちらについても簡単に紹介します.
pairの使い方
初期化と要素へのアクセス
- make_pair()というヘルパー関数を用いて初期化
2つの値の組を設定する. - object.first, object.secondで要素へアクセス
#include <iostream> #include <string> #include <utility> using namespace std; int main() { std::pair<int, string> p = std::make_pair(1, "first"); // cout << p.first << endl; // 1 cout << p.second << endl; // "first" return 0; }
vectorと合わせた利用法
例として,名前と年齢の組を複数持つ名簿のようなものを作るケースを考えます. ここではこの名簿をvectorとpairを組み合わせることで実現します(重複がないのであれば,vectorよりもsetを使う方が適切かもしれません). 下記の例では途中でソートする処理を入れています.この場合,ソートはpairの1つ目,2つ目の要素に対して順に作用します.
#include <iostream> #include <string> #include <utility> #include <vector> using namespace std; int main() { vector<pair<string, int>> v; v.push_back(make_pair("Tom", 15)); v.push_back(make_pair("Ken", 13)); v.push_back(make_pair("Alice", 14)); v.push_back(make_pair("Alice", 16)); sort(v.begin(), v.end()); for (auto iter = v.begin(), iter != v.end(); ++iter) { cout << "Name: " << *iter.first << " Age: " << *iter.second << endl; } /* Name: Alice Age: 14 Name: Alice Age: 16 Name: Ken Age: 13 Name: Tom Age: 15 */ return 0; }
tupleの使い方
初期化と要素へのアクセス
make_tuple()というヘルパー関数を用いて初期化
pairに似ているが,pairは2つの値の組であったのに対しtupleは任意のN個の値の組を扱うことができる.std::get<i>(object)でi番目の要素へアクセス
以下の例ではtupleにx, y, z座標を格納し,それぞれの座標を表示させる例である.
#include <iostream> #include <string> #include <tuple> using namespace std; int main() { // (x, y, z)座標をtupleで定義 std::tuple<float, float, float> t = std::make_tuple(1.0, 0.0, -2.0); cout << "x: " << get<0>(p) << endl; // x: 1.0 cout << "y: " << get<1>(p) << endl; // y: 0.0 cout << "z: " << get<2>(p) << endl; // z: -2.0 return 0; }