对于双(多)标准的结构体排序,有三种方法可供参考。
struct number{
int val;
int cnt;
}ans[maxsize];
比较规则:将结构体按cnt降序排列,若cnt值相同时,按val升序排。
1.比较函数的重写
bool cmp(const number a,const number b)
{
if(a.cnt!=b.cnt)
return a.cnt > b.cnt;
return a.val < b.val;
}
sort(ans,ans+length,cmp);
2.结构体内部运算符重载
struct number{
int val;
int cnt;
bool operator < (const number &a)
{
if(cnt != a.cnt)
return this->cnt > a.cnt;
return this->val < a.val;
}
}ans[maxsize];
//sort 默认升序排列,重载 < 就是重写sort的规则
sort(ans,ans+length);
3.外部运算符重载
bool operator < (const number &a,const number &b)
{
if(a.cnt != b.cnt)
return a.cnt > b.cnt;
return a.val < b.val;
}
sort(ans,ans+length);
运行结果:
但三种方法里第一种比较函数的重写没有后两种效率高。