#include<bits/stdc++.h>
using namespace std;
// 一
// 在结构体中重载比较符 "<"
struct Node1
{
// u是第一关键字,v是第二关键字
int u, v;
bool operator<(const Node1& m)const {
if (u == m.u)
return v < m.v;
else
return u < m.u;
// u是按照升序排列,即如果this->u<m.u那么this对象则被认为是小于m对象
// v是按照升序排序的,即如果this->v<m.v那么this对象则被认为是小于m对象
//上面if-else等于下面的三目运算符
//return u == m.u ? v < m.v : u < m.u;
}
};
struct Node2 {
int a, b, c;
bool operator<(const Node2 m) const {
if (a == m.a) {
if (b == m.b) {
return c < m.c;// 第三关键字c升序排列
}
else
return b > m.b;// 第二关键字b降序排列
}
else
return a > m.a; // 第一关键a字降序
// 上面的语句等于下面的语句
/*if (a != m.a) return a > m.a;
if (b != m.b) return b > m.a;
return c < m.c;*/
}
};
// 二
// 定义sort函数中的cmp
struct node {
int a, b,c;
};
bool cmp(const node& n1, const node& n2) {
if (n1.a != n2.a) return n1.a > n2.a; // 第一关键字a降序排列
if (n1.b != n2.b) return n1.b < n2.b; // 第二关键字b升序排列
return n1.c > n2.c;// 第三关键字c降序排列
}
// 三
// 结合lambda匿名函数使用
sort(node_array,node_array+n,[](node &n1,node &n2)->bool{
if (n1.a != n2.a) return n1.a > n2.a;
if (n1.b != n2.b) return n1.b < n2.b;
return n1.c > n2.c;
};
)
int main() {
return 0;
}
多关键字排序
于 2025-01-25 21:55:00 首次发布