【C++】std::pair の使い方 | 2つの値をペアで扱う方法

目次

はじめに

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つの値を返したい(例: 結果とエラーコード)場合など、様々な場面で活用できる基本的なデータ構造です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次