由于成绩范围比较小 所以可以直接定义哈希数组 string[101] 成绩作为数组下标 名字作为对应的string值 重复的名字直接用空格拼接起来最后再拆开即可
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
void print_grades(const vector<string>& info, const int& op) {
//op为1表示递增 0表示递减
int start = op ? 0 : 100;
int end = op ? 101 : -1;
int step = op ? 1 : -1;
for(int i = start; i != end; i += step) {
if (info[i] != " ") {
vector<string> names; //防止有相同分数的 将分数相同的名字按先后顺服放到names里
stringstream ss(info[i]);
string token;
while (getline(ss, token, ' ')) {
names.push_back(token);
}
for (const string& name : names)
cout << name << " " << i << endl;
}
}
}
int main() {
int n, op;
cin >> n >> op;
vector<string> info(101, " ");
for (int i = 0; i < n; ++i) {
string name;
int grade;
cin >> name >> grade;
if (info[grade] != " ") {
info[grade] += " " + name; //如果有重复成绩的就添加到已有姓名的后面
} else info[grade] = name;
}
print_grades(info, op);
return 0;
}



京公网安备 11010502036488号