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