从大到小排可以这样sort(a, a + n, greater())
多关键字排序 429. 奖学金
例如有a,b,c三种类型,a不同先排大的,b不同先排大的,c不同先排小的
写法1:重载小于号
struct Person
{
int a, b, c;
bool operator< (const Person& t) const
{
if(a != t.a) return a > t.a;
if(b != t.b) return b > t.b;
return c < t.c; // 按顺序
}
}q[N];
sort(q, q + n);
写法2:自定义比较函数
struct Person
{
int a, b, c;
}q[N];
bool cmp(Person& a, Person& b)
{
if(a.a != b.a) return a.a > b.a;
if(a.b != b.b) return a.b > b.b;
return a.c < b.c;
}
sort(q, q + n, cmp);
写法3:lambda表达式写法
struct Person
{
int a, b, c;
}q[N];
sort(q, q + n, [](Person& a, Person& b){
if(a.a != b.a) return a.a > b.a;
if(a.b != b.b) return a.b > b.b;
return a.c < b.c;
});