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

头文件

我最经常用的是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 时,表示第一个参数应该排在第二个参数之前。