Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Sorting Tuples"
https://onlinejudge.u-aizu.ac.jp/problems/ITP2_5_B
n個の品物が与えられます。各品物は{価値、重さ、型、日時、名前}の属性を持ち、これらはそれぞれ整数、整数、英大文字、整数、英小文字の文字列で表されます。 与えられた品物を以下の優先順で出力してください。
1. 価値が低い品物を先に出力する
2. 価値が同じ場合は、重さが小さい品物を先に出力する
3. 重さが同じ場合は、型がアルファベット順で小さい品物を先に出力する
4. 型が同じ場合は、日時が早い品物を先に出力する
5. 日時が同じ場合は、名前が辞書順で小さい品物を先に出力する
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ITP2_5_B : Sorting Tuples
/* Aizu Online Judge in C++ #ITP2_5_B : Sorting Tuples https://onlinejudge.u-aizu.ac.jp/problems/ITP2_5_B 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ long long n; cin>>n; vector<tuple<long long,long long,string,long long,string> > vwtds; for(long long i=0;i<n;i++){ long long v,w,d; string t,s; cin>>v>>w>>t>>d>>s; vwtds.emplace_back(v,w,t,d,s); } sort(vwtds.begin(),vwtds.end()); for(auto& a:vwtds){ cout<<get<0>(a)<<" "<<get<1>(a)<<" "<<get<2>(a)<<" "<<get<3>(a)<<" "<<get<4>(a)<<endl; } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/