个人比较喜欢用结构体来存两个有关联的变量,而不喜欢用二维数组,因为很容易出错.

头文件

我最经常用的是sort排序,这里头文件用的是

#include<algorithm>

使用方法

sort()函数的最常用,就是数组的排序,但是它也可以用在结构体排序上面

1.我们的结构体命名为一个结构体数组

struct Student {
    char name[11];
    int solve;
    int time;
}p[10000];

2.之后这样引用

int main()
{
    sort(p,p+n,cmp);//在主函数中调用,结构体排序;
}

3.具体的cmp函数为自己写的,像这个例子里,

按照题数,再按时间,再名字(名字按字典序排列)

bool cmp(const Student& a, const Student& b)
{
    if (a.solve != b.solve)
     { 
        if (a.solve > b.solve)
            return true;
        else
            return false;
    }
    else if (a.time != b.time)
           return a.time < b.time;
    else
          return (strcmp(a.name, b.name) < 0);
}

完整的案例代码

#include<iostream>
#include<algorithm>
using namespace std;
struct Student {
    char name[11];
    int solve;
    int time;
}p[10000];
bool cmp(const Student& a, const Student& b)
{
    if (a.solve != b.solve)
     { 
        if (a.solve > b.solve)
            return true;
        else
            return false;
    }
    else if (a.time != b.time)
           return a.time < b.time;
    else
          return (strcmp(a.name, b.name) < 0);
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
      cin>>p[i].name>>p[i].solve>>p[i].time;
    sort(p,p+n,cmp);//在主函数中调用,结构体排序;
    for(int i=0;i<n;i++)
      cout<<p[i].name;
    return 0;
}
//按照题数,再罚时间,再名字(名字按字典序排列)

chatgpt 关于 sort 函数第三个参数使用说明

image.png

当返回值为 true 时,表示第一个参数应该排在第二个参数之前。