c++问题:考试排序问题

我思考了很久也没有想出好答案,您们能想出来吗,十分感谢!
题目
某班级进行了一次考试,本次考试考了语文,数学两科成绩,班主任想让小明根据本次班级考试的学生的分数情况,进行一个排名,先按照总分进行排名,总分高的排名在最前面,总分一样时,按照语文成绩从高到低进行排名,如果语文成绩一样,则按照学号小的排到前面。班主任想要获得班级里前五名的情况,请你用c++语言回答。(说明:编号以输入时的次序作为该学生的编号)
输入描述
总共n+1行
第一行一个整数n,表示班级总人数n
接下来有n行,每行有4个数据,第一个数据表示姓名,第二个数据表示语文成绩,第三个表示数学成绩
输出描述
总共输出5行,为前5名学生的情况
每行有3个数据,该学生的编号,姓名,总分,每个数据之间使用一个空格
样例
输入

6
xiaomin 80 96
aji 98 63
wangmin 55 90
duoduo 99 89
zhang 100 100
min 98 63
输出
5 zhang 200
4 duoduo 188
1 xiaomin 176
2 aji 161
6 min 161
我写的是

#include
using namespace std;
int main() {
      int a;
        cin >> a;
        for (a;a<100;a++)
        {
        
        }
      return 0;
}

然后就不会了,您们能帮我写一下吗,谢谢!

供参考:

#include<iostream>
using namespace std;
struct student{
    int  id;
    char name[16];
    int  language,math;
    int  sum;
}stu[50];
void swap(struct student *a, struct student *b)
{
    struct student t;
    t = *a; *a = *b; *b = t;
}
int main() {
    int n, i, j;
    cin >> n;
    for (i = 0;i < n; i++)
    {
        stu[i].id = i+1;
        cin >> stu[i].name >> stu[i].language >> stu[i].math;
        stu[i].sum = stu[i].language + stu[i].math;
    }
    for (i = n - 1; i > 0; i--)
    {
        for (j = 0; j < i; j++)
        {
            if (stu[j].sum < stu[j+1].sum ||
                stu[j].sum == stu[j+1].sum && stu[j].language < stu[j+1].language ||
                stu[j].language == stu[j+1].language && stu[i].id > stu[j+1].id)
                swap(&stu[j], &stu[j+1]);
        }
    }
    for (i = 0; i < 5; i++)
        cout << stu[i].id << " " << stu[i].name << " " << stu[i].sum << endl;
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^