はじめに
C++でプログラミングをしていると、「キーと値」「姓と名」「x座標とy座標」のように、常に対(ペア)で扱いたい2つのデータが出てくることがあります。この目的のために、C++の標準ライブラリ <utility>
には、std::pair
という便利なクラステンプレートが用意されています。
std::pair
を使えば、2つの値を一つの変数として、関数の引数や戻り値、コンテナの要素として手軽に扱うことができます。特に std::map
の要素は、内部的に std::pair
として格納されています。
この記事では、std::pair
の基本的な使い方(生成、値の変更、要素へのアクセス)を解説します。
std::pair
を使ったサンプルコード
このコードは、int
(ID)と string
(名前)をペアで保持する pair
を作成し、その値を変更したり、個々の要素を取り出して表示したりする方法を示します。
完成コード
#include <iostream>
#include <utility> // pair, make_pair を使うために必要
#include <string>
using namespace std;
int main() {
// 1. pairの生成 (コンストラクタで初期化)
pair<int, string> user_data(101, "佐藤");
// 2. .first と .second で各要素にアクセス
cout << "--- 初期値 ---" << endl;
cout << "ID: " << user_data.first << endl;
cout << "名前: " << user_data.second << endl;
// 3. make_pairで新しいpairを作成し、代入
user_data = make_pair(202, "鈴木");
cout << "\n--- 値を変更後 ---" << endl;
cout << "ID: " << user_data.first << endl;
cout << "名前: " << user_data.second << endl;
// C++17以降の構造化束縛を使うと、より便利に分解できる
auto [id, name] = user_data;
cout << "\n--- 構造化束縛 ---" << endl;
cout << "ID: " << id << ", 名前: " << name << endl;
return 0;
}
コードの解説
1. pair
の生成
pair<int, string> user_data(101, "佐藤");
std::pair
を使うには、< >
の中に、ペアにしたい2つのデータ型を順番に指定します。- コンストラクタの引数に、それらの型に対応する初期値を渡すことで、オブジェクトを生成できます。
2. std::make_pair
user_data = make_pair(202, "鈴木");
std::make_pair
は、引数として渡された2つの値から、対応する型のpair
オブジェクトを自動で生成して返すヘルパー関数です。pair<int, string> p = {202, "鈴木"};
のように、初期化子リストを使うこともできます。
3. 要素へのアクセス (.first
, .second
)
pair
の各要素にアクセスするには、メンバ変数 .first
と .second
を使います。
.first
: 1番目の要素にアクセスします。.second
: 2番目の要素にアクセスします。
まとめ
今回は、C++の std::pair
を使って、2つの値を一つのオブジェクトにまとめる方法を解説しました。
std::pair<T1, T2>
で、2つの型のペアを定義できる。std::make_pair
で、値から簡単にpair
を生成できる。.first
と.second
で、それぞれの要素にアクセスする。
pair
は、std::map
のキーと値のペアを表現したり、関数から2つの値を返したい(例: 結果とエラーコード)場合など、様々な場面で活用できる基本的なデータ構造です。