在某个班的一次考试求地kmin

在某个班的一次考试中,n(n<10)个学生的考试成绩都不相同,现知道了每个学生的学号和成绩,
求考第k名学生的学号和成绩。

输入
3(班级共n名学生)
200901 86
200902 89
200903 87
2(第k名学生)

输出
200902 89

第一个版本: 以1为排头。也就是说第一名是1第二名是2


#include <iostream>
#include <windows.h>
using namespace std;
struct information
{
    int numer;
    double  score;

}s[10];
int main()
{
    int m;
    cout << "请输入几名同学:" << endl;
    cin >> m;
    for (int i = 0; i < m; i++)
    {
        cout << "请输入第" << i + 1 << "名的学号、成绩" << endl;
        cin >> s[i].numer >> s[i].score;
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < m - 1 - i; j++)
        {
            if (s[j].score>s[j+1].score)
            {
                double t;
                t = s[j].score;
                s[j].score = s[j + 1].score;
                s[j + 1].score = t;
            }
            int t;
        
        }
    }
    int n;
    cout << "请输入你要查询第几名" << endl;
    cin >> n;
    cout << s[n-1].numer <<"  "<< s[n - 1].score << endl;
}

这就是一个排序的问题。
1-用一个二位数组把学生信息存储下来
2-对数组进行排序,参与排序每个对象都是是一个数组,以数组的第二个元素成绩的大小决定数组的大小
3-从排序后的数组中选择第k个一维数组就是要的结果

map<序号,学生信息(学号,成绩)>
map.find("序号")

考第二名的不是200903 87吗?
#include<bits/stdc++.h>
using namespace std;
struct node//结构体数组存每个学生的学号和成绩
{
string s;
int m;
}a[10];
bool cmp(node a,node b)//自定义排序函数
{
return a.m>b.m;//按分数排序
}
int main()
{
int n,k;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i].s>>a[i].m;
cin>>k;
sort(a,a+n,cmp);//按分数排序
cout<<a[k-1].s<<" "<<a[k-1].m;//输出考第k名的学号和成绩
return 0;
}