C++ 自定义 sort() 排序规则

C++ 自定义 sort() 排序规则

C++ STL中sort方法对自定义类的排序

C++中的sort自定义排序函数

主要有3种方法

  • 通过谓词函数自定义排序规则
sort(pers.begin(), pers.end(), [&](const Person& lhs, const Person& rhs) {return lhs.height > rhs.height;});
  • 通过自定义比较函数定义排序规则
sort(pers.begin(), pers.end(), myComp);
  • 通过声明比较类定义排序规则
sort(pers.begin(), pers.end(), Comp());

示例代码如下

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

struct Person
{
	string name;
	int age;
	int height;
};

bool myComp(const Person& lhs, const Person& rhs)
{
	return lhs.height > rhs.height;
}

struct Comp
{
	bool operator()(const Person& lhs, const Person& rhs)
	{
		return lhs.height > rhs.height;
	}
};

int main()
{
	Person p1 = { "lei", 18, 184 };
	Person p2 = { "wang", 16, 175 };
	Person p3 = { "guo", 20, 178 };
	vector<Person> pers = { p1, p2, p3 };
	cout << "排序前:" << endl;
	for (const Person& per : pers)
	{
		cout << "name: " << per.name << "\t age: " << per.age << "\t height: " << per.height << endl;
	}
	// 用lambda表达式
	// sort(pers.begin(), pers.end(), [&](const Person& lhs, const Person& rhs) {return lhs.height > rhs.height;});
	// 用自定义比较函数
	// sort(pers.begin(), pers.end(), myComp);
	// 声明比较类
	sort(pers.begin(), pers.end(), Comp());
	cout << "排序后:" << endl;
	for (const Person& per : pers)
	{
		cout << "name: " << per.name << "\t age: " << per.age << "\t height: " << per.height << endl;
	}
	return 0;
}

输出结果

排序前:
name: lei        age: 18         height: 184
name: wang       age: 16         height: 175
name: guo        age: 20         height: 178
排序后:
name: lei        age: 18         height: 184
name: guo        age: 20         height: 178
name: wang       age: 16         height: 175
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Prejudices

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值