パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C++ Pairの使い方



概要



Pairの基本的な使い方

宣言&初期化

std::pair<値1の型, 値2の型> p{値1, 値2};

値の表示

  • 値1は「変数名.first」、値2は「変数名.second」で読み取り& 書き取りができます。
std::pair<値1の型, 値2の型> p{値1, 値2};



使用例

値の表示と書き換え

ソースコード

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

int main() {
  // 宣言と初期化
  std::pair<int, std::string> p{1, "hello"};

  // 表示
  std::cout << p.first << ", " << p.second << std::endl;
  
  // 値を書き換え
  p.first = 3;
  p.second = "bye";
  
   // 表示
  std::cout << p.first << ", " << p.second << std::endl;
}

実行結果

1, hello
3, bye




2次元座標の探索(setと併用)

目的

  • 競技プログラミングなどでは、2次元座標の効率よい探索が必要になることがあります。
  • 2次元のvectorを使ってfor文で全探査すると制限時間に処理が完了しない場合(TLE)がありますが、setと併用することで効率よい探査ができます。
  • setの使い方はこちらの記事を参考に⇒C++ setの使い方(追加・削除、検索、for文など) - パハットノート


ソースコード

#include <utility>
#include <iostream>
#include <set>

int main() {
  // 宣言と初期化
  std::set<std::pair<int, int>> st;

  // 対象となる座標を追加
  st.insert({3, 4});
  st.insert({-1, 2});
  st.insert({5, 6});
  st.insert({0, 0});

  // (0, 0)があるかをチェック(存在するので、ifの方が表示される)
  if(st.find({0, 0})!=st.end()){
    std::cout << "(0, 0)は存在する" << std::endl;
  }
  else {
    std::cout << "(0, 0)は存在しない" << std::endl;
  }

  // (1, 0)があるかをチェック(存在しないので、elseの方が表示される)
  if(st.find({1, 0})!=st.end()){
    std::cout << "(1, 0)は存在する" << std::endl;
  }
  else {
    std::cout << "(1, 0)は存在しない" << std::endl;
  }
}

実行結果

(0, 0)は存在する
(1, 0)は存在しない