由于成绩范围比较小 所以可以直接定义哈希数组 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; }