大致思路就是按照题目要求设置一下sort函数的cmp参数

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
typedef struct {
    string name;
    int age;
    int grade;
} Student;

bool cmp(Student a, Student b) {
    if (a.grade < b.grade) {
        return true;
    } else if (a.grade > b.grade) {
        return false;
    } else { //the same grade
        if (a.name < b.name) {
            return true;
        } else if (a.name > b.name) {  //the same name
            return false;
        } else {
            return a.age < b.age;
        }
    }
}

int main() {
    int N;
    cin>>N;
    Student *arr = new Student[N]; 
    for (int i = 0; i < N; i++) {
        cin>>arr[i].name>>arr[i].age>>arr[i].grade;
    }
    sort(arr, arr+N, cmp);
    for (int i = 0; i < N; i++) {
        cout<<arr[i].name<<" "<<arr[i].age<<" "<<arr[i].grade<<endl;
    }
    return 0;
}