tupleの使い方

Quiz

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP2_5_B

Submission

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=3574803#1

説明

  • 5変数を辞書順にソート
  • 値なら小さい順、文字列なら辞書順なので、2変数ならpairでやっていた
  • 今回は5変数なのでtupleを使う
    • もしくは構造体 or クラスを使い、比較関数も定義してソート
  • タイトルに合わせてtupleを使った
  • しかし出力時などの値取り出しにtieを使うなどする必要があり、使い心地は良くない
  • 整理して書きたいときは、私はstructを使うだろう

コンパイルオプション

g++ -std=c++14 answer.cpp

Code

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

#define FOR(i,a,b) for(ll i=(a);i<(b);++i)
#define ALL(v) (v).begin(), (v).end()

typedef tuple<ll, ll, char, ll, string> T;

int main(){
    ll N;
    cin >> N;

    vector<T> A;

    FOR(i, 0, N){
        ll a, b;
        char c;
        ll d;
        string e;
        cin >> a >> b >> c >> d >> e;

        A.push_back(make_tuple(a, b, c, d, e));
    }
    sort(ALL(A));

    for(auto tup : A){
        ll a, b;
        char c;
        ll d;
        string e;
        tie(a, b, c, d, e) = tup;
        cout << a << ' ' << b << ' ' << c << ' ' << d << ' ' << e << endl;
    }

    return 0;
}