排序算法之自定义排序函数的含义

我们经常碰到stl容器或者一些排序算法需要用户自定义实现排序规则,为什么要用户自定义排序规则函数呢?请考虑如下场景:

cpp 复制代码
std::vector<int> nums = {1, 3, 2, 5, 4};

// 升序排序(默认)
std::sort(nums.begin(), nums.end(), std::less<int>());
// 或简写为
std::sort(nums.begin(), nums.end());  // 默认使用 operator<

// 降序排序
std::sort(nums.begin(), nums.end(), std::greater<int>());

上面的例子会使用默认的比较函数,用户只需要指定升序还是降序就可以了。但是数据类型不一定都是整型,很有可能是用户自定的类,请看下面的例子:

cpp 复制代码
class Myclass
{
    private:
        std::string name;
        int age;
}

上面的的类型中包含了2个变量,这种情况下应该如何进行排序呢?sort方法肯定没有办法实现这种用户自定义的类型不用成员的排序,那应该怎么办呢?于是sort函数提供了一种方式,即用户自己实现一个函数或者函数对象,这个函数的形式如下:

cpp 复制代码
bool func(T a, T b);
//返回值为布尔型,该函数有两个输入参数,参数的类型都是要进行排序的数据类型
  1. 输入参数a:数据类型为T,这里的T表示的是排序的数据类型,比如上面的例子是类型就是Myclass
  2. 输入参数b:数据类型为T,这里的T表示的是排序的数据类型,比如上面的例子是类型就是Myclass
  3. 返回值:布尔值类型,true的含义是a在b的前面;false的含义是a在b的后面。注意这个函数的含义是a与b比较,若为true,则第一个参数a在第二个参数b前面;若为false,则相反
相关推荐
Wadli5 分钟前
26.单调栈
算法
晨曦夜月7 分钟前
进程的五大状态及特殊进程解析
linux·服务器·算法
吟安安安安12 分钟前
适合短期冲刺的学习工作流(针对算法)
学习·算法
科研前沿17 分钟前
什么是时空融合技术?
大数据·人工智能·数码相机·算法·重构·空间计算
AI科技星21 分钟前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算
AI科技星26 分钟前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
Deepoch28 分钟前
数学模型驱动:Deepoc 低幻觉数学大模型助力发动机全周期智能优化
人工智能·算法·机器学习·deepoc·数学大模型·低幻觉
嘻嘻哈哈樱桃37 分钟前
牛客经典101题解题集--贪心算法+模拟
java·python·算法·贪心算法
AKDreamer_HeXY38 分钟前
QOJ 12255 - 36 Puzzle 题解
数据结构·c++·数学·算法·icpc·qoj
AI科技星1 小时前
《全域数学》第一部 数术本源 第三卷 代数原本第14篇 附录二 猜想证明【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算