題目敘述
每筆測資第一行會有一個正整數N,接下來會有N筆資料,每筆資料會依序輸入一個字串 (代表學生名字)、一個整數 (代表學生班級)、一個整數 (代表學生座號)、和一個字串 (代表學生自介)。要求將班級和座號排序過後輸出班級、座號、名字、和自介 (格式請見範例輸出)。
範例輸入 #1
3
陳希臻 15 12 我喜歡吸貓
鄭允臻 14 27 我討厭陳芭樂
魏家琦 8 37 我其實是白家琦
範例輸出 #1
8 37 魏家琦
我其實是白家琦
14 27 鄭允臻
我討厭陳芭樂
15 12 陳希臻
我喜歡吸貓
解題思路
可以使用Pair和Map的方式將數字和字串分開來存,並用Pair來做排序,最後輸出排序過後的Pair和Map中的對應值即可。
解題程式碼如下 (僅供參考):
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
pair<int, int> rtn(int a, int b)
{
pair<int, int>tmp;
tmp.first = a;
tmp.second = b;
return tmp;
}
pair<string, string> pp (string a, string b)
{
pair<string, string>tmp;
tmp.first = a;
tmp.second = b;
return tmp;
}
int main() {
int N;
cin >> N;
vector<pair<int, int>>v;
map<pair<int, int>, pair<string, string>>MAP;
for (int i = 0; i<N; i++)
{
string name, word;
int c, no;
cin >> name >> c >> no >> word;
pair<int, int>p = rtn(c, no);
v.push_back(p);
MAP[p] = pp(name, word);
}
sort(v.begin(), v.end());
for (int i = 0; i<N; i++)
{
cout << v[i].first << " " << v[i].second << " " << MAP[v[i]].first << "\n" << MAP[v[i]].second << "\n";
}
}
留言
張貼留言