Aizu Online Judge(AOJ)が提供している「プログラミング応用」(ITP2)の5_A問題をC++で解いてみました。
ITP2では、「プログラミングのための基礎ライブラリを獲得します」とあります。トピック#5では、「順列」というテーマで学びます。
問題(5_A: Sorting Pairs)
問題はリンク先をご覧ください。
2つの異なる型の値を保持する pair について学びます。
Pair について
以下は、cpprefjp 様の記事を参考にさせていただきました。
pair は、2つの異なる型の値を保持することができます。以下のメンバ変数、ヘルパ関数が使えます。
名前 | 説明 |
first | pair の最初の値を参照するメンバ変数 |
second | pair の2番目の値を参照するメンバ変数 |
make_pair | pair を構築するヘルパ関数 |
C++ プログラム例(ITP2 5_A)
pair の値を vector の要素として格納して sort します。sort は、最初のメンバで sort した後に、次のメンバで sort します。結果的に、問題が要求している並び順になります。
pair に関係するコードの背景色を変更しました。以下は、C++のプログラムです。
#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<pair<int, int>> data(n);
for (int i = 0; i < n; ++i) {
int x, y;
cin >> x >> y;
data[i] = make_pair(x, y);
}
sort(data.begin(), data.end());
for (int i = 0; i < n; ++i) {
cout << data[i].first << " " << data[i].second << endl;
}
return 0;
}
上記プログラムは、AOJ で「AC(Accepted=正解)」と判定されました。
最後に
pair は、いろいろな場合に使えます。同じ型を指定して、2次元の座標を保持するような使い方もできます。
引き続き、ITP2 の問題を紹介していきます。