解题排行序号问题 不知道如何解决

解题排行榜中,按解题总数生成排行榜。假设每个学生信息仅包括学号、解题总数;要求先输入n个学生的信息;然后按“解题总数”降序排列,若“解题总数”相同则按“学号”升序排列。

输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试数据先输入1个正整数n(1 ≤ n ≤ 100),表示学生总数。然后输入n行,每行包括1个不含空格的字符串s(不超过8位)和1个正整数d,分别表示一个学生的学号和解题总数。

输出格式:
对于每组测试数据,输出最终排名信息,每行一个学生的信息:排名、学号、解题总数。每行数据之间留一个空格。注意,解题总数相同的学生其排名也相同。

#include
#include
using namespace std;
struct stu{
  string s,d;
  int sno;
};
bool cmp(stu a,stu b){
    if(a.d>b.d){
        return a.d>b.d;
    }else if(a.d==b.d&&a.s>b.s){
        return b.s>a.s;
    }
}
int main(){
    int T;
    cin>>T;
    while(T--){
        int n;
        cin>>n;
        stu s[n];
        for(int i=0;i>s[i].s>>s[i].d;
        }
        sort(s,s+n,cmp);
//         int r=1;
        for(int i=0;i" "<" "<return 0;
}

img

sno变量也要cin进来的