对于C++中sort()需要加入
#include <algorithm>该头文件
sort(首地址【必填】,尾地址【必填】,排序cmp函数【选填】)
sort对于基本数据类型默认从小到大进行排序
例如如下结构体数组
struct Student{
char id[15];//准考证号
int score;//成绩
int location_number;//考场号
int location_rank;//考场内排名
}stu[30000];
如何对其进行排序呢???
该题的要求是按照成绩由大到小对学生进行排序,当成绩相同时对与准考证号由小到大进行排序。
这样特殊的对象特殊的排序,就要使用自己写的cmp函数(compare函数)
bool cmp(Student a,Student b){
if(a.score!=b.score)
return a.score>b.score;
else
return strcmp(a.id,b.id)<0;//strcmp函数需要加入头文件<string.h>
}
分数由大到小则用大于,由小到大用小于
对于strcmp函数若a.id比b.id小则返回一个负数(注意不一定是-1,不同编译器会有不同的界定,不可使用==-1来判断),反之,大则返回正数,相等则为0。
strcmp<0则说明其按照从小到大的顺序进行排列
sort(stu,stu+num,cmp);对于sort函数的调用,stu是其首地址(理解为数组名就是首地址),stu+num为尾地址,cmp直接写函数名称。即可对已知结构体数组进行调用。
另外在输入和输出结构体中的char[ ]数组,直接cin>>stu[i].id;或cout<<stu[i].id;即可。
——henu.hjy