最近做题的时候总会遇到排序问题,同样一个问题用结构体排序和用数组做差的不仅仅是代码的长度,还有理解的难易程度,很明显,用结构体排序更简单易懂。
但结构体不能直接用algorithm头文件里的sort函数,需要我们自己补充一个函数。这里就给大家一一列举出来。
一个判断条件
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct cj
{
int num;
string name;
int score;
};
bool cmp(cj a,cj b)
{
return a.score>b.score;
}
int main()
{
cj x[5]; //这里的5可以手动输入n代替
for(int i=0;i<5;i++)
cin>>x[i].name>>x[i].score>>x[i].num;
sort(x,x+5,cmp);
cout<<'\n';
for(int i=0;i<5;i++)
cout<<x[i].name<<'\t'<<
x[i].score<<'\t'<<x[i].num<<'\n';
system("pause");
return 0;
}
这里的判断条件为score,效果如图
多个判断条件(以两个为例)
还是以上的代码,只要把cmp函数稍做修改就可以了。
这里我们的第二给判断条件为num.
bool cmp(cj a,cj b)
{
if(a.score!=b.score)
return a.score>b.score;
else
return a.num>b.num;
}
效果如图
有更多条件也可以仿照两个条件的进行修改,
要强调的是,多个条件中,越靠前的所起作用越大。
这里对于初学者不一定要懂为什么要这样写,只需要会用就好了。等到熟练之时可以再找资料更深层次地理解。
有什么问题欢迎在评论区与我交流。