多关键字排序

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值