AIZU ONLINE JUDGE

AOJ ITP2 5_B(Sorting Tuples)を解く

AOJ_ITP2_5_B

Aizu Online Judge(AOJ)が提供している「プログラミング応用」(ITP2)の5_B問題をC++で解いてみました。

ITP2では、「プログラミングのための基礎ライブラリを獲得します」とあります。トピック#5では、「順列」というテーマで学びます。

問題(5_B: Sorting Tuples)

問題はリンク先をご覧ください。

AOJ ITP2 5_B問題: Sorting Tuples

3つ以上の異なる型の値を保持する tuple について学びます。

Tuple について

以下は、cpprefjp 様の記事を参考にさせていただきました。

tuple は、3つ以上の異なる型の値を保持することができます。以下のインターフェイス、ヘルパ関数が使えます。

名前説明
gettuple の i 番目の値を参照するインターフェイス
make_tupletuple を構築するヘルパ関数

C++ プログラム例(ITP2 5_B)

tuple の値を vector の要素として格納して sort します。sort は、最初のメンバで sort した後に、次のメンバで sort することを繰り返します。結果的に、問題が要求している並び順になります。

4番目のメンバーは32ビット整数では足りないため、long long 型にしています。

tuple に関係するコードの背景色を変更しました。以下は、C++のプログラムです。

#include <iostream>
#include <tuple>

#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int n;
	cin >> n;

	vector<tuple<int, int, char, long long int, string>> data(n);
	for (int i = 0; i < n; ++i) {
		int v;
		int w;
		char t;
		long long int d;
		string s;
		cin >> v >> w >> t >> d >> s;
		data[i] = make_tuple(v, w, t, d, s);
	}

	sort(data.begin(), data.end());

	for (int i = 0; i < n; ++i) {
		cout << get<0>(data[i]) << " "
		     << get<1>(data[i]) << " "
		     << get<2>(data[i]) << " "
		     << get<3>(data[i]) << " "
		     << get<4>(data[i]) << endl;
	}

	return 0;
}

上記プログラムは、AOJ で「AC(Accepted=正解)」と判定されました。

最後に

tuple は、pair と比較して見かけない印象です。必要な場合に使いこなしたいです。

引き続き、ITP2 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA