
关于C++内置排序函数sort的自定义比较器cmp用法
2.关于自定义比较器
返回 当
发布日期:2021-05-28 16:52:35
浏览次数:32
分类:精选文章
本文共 2552 字,大约阅读时间需要 8 分钟。
关于C++内置排序函数sort的自定义比较器cmp用法
1.基础知识
C++的内置排序函数 sort
是一个非常方便且常用的工具,默认进行升序排序。其头文件为 <algorithm>
。以下是一个简单的排序示例:
#include#include using namespace std;int main() { vector array = {1, 2, 12, 56, 47, 23, 88, 45, 3, 4, 5, 6, 7}; sort(array.begin(), array.end()); for(int num : array) { cout << num << " "; cout << endl; } return 0;}
运行结果如下:
1 2 3 4 5 6 7 12 23 45 47 56 88
如果对 int
数组 a[10]
进行排序,可以写成:
sort(a, a + 10);
2.关于自定义比较器 cmp
sort
函数可以使用自定义比较器来定制排序规则。以下是一个简单的比较器示例:
bool cmp_up(int a, int b) { return a < b;}bool cmp_down(int a, int b) { return a > b;}int main() { vector array = {1, 2, 12, 56, 47, 23, 88, 45, 3, 4, 5, 6, 7}; cout << "asc order: "; sort(array.begin(), array.end(), cmp_up); for(int num : array) { cout << num << " "; cout << endl; } cout << "desc order: "; sort(array.begin(), array.end(), cmp_down); for(int num : array) { cout << num << " "; cout << endl; } return 0;}
运行结果如下:
asc order: 1 2 3 4 5 6 7 12 23 45 47 56 88desc order: 88 56 47 45 23 12 7 6 5 4 3 2 1
3.自定义比较器的规则
自定义比较器 cmp
需要遵循以下规则:
true
时:第一个参数放在前面,第二个参数放在后面;返回 false
时则反之。a
等于 b
时,必须返回 false
。以下是一个例子,用于将数组的奇数部分放在前面,偶数部分放在后面,并且保持奇数和奇数、偶数和偶数的相对位置不变:
bool cmp(int a, int b) { if ((a % 2 == 0 && b % 2 == 1)) { return false; } else if ((a % 2 == 0 && b % 2 == 0)) { return false; } else if ((a % 2 == 1 && b % 2 == 1)) { return false; } else { return true; }}int main() { vector array = {1, 2, 12, 56, 47, 23, 88, 45, 3, 4, 5, 6, 7}; sort(array.begin(), array.end(), cmp); for(int num : array) { cout << num << " "; cout << endl; } return 0;}
运行结果如下:
1 47 23 45 3 5 7 2 12 56 88 4 6
4. 增加排序规则
在上述基础上,增加一个要求:相同类型的数之间按升序排序。
bool cmp(int a, int b) { if ((a % 2 == 0 && b % 2 == 1)) { return false; } else if ((a % 2 == 0 && b % 2 == 0)) { return a >= b ? false : true; } else if ((a % 2 == 1 && b % 2 == 1)) { return a >= b ? false : true; } else { return true; }}
运行结果如下:
1 3 5 7 23 45 47 2 4 6 12 56 88
5. 个人想法
记住自定义比较器的规则非常重要。比较器的正确性直接决定了排序结果的准确性。您可以参考以下Bilibili视频来进一步理解:https://search.bilibili.com/all?keyword=sort%20cmp%20C%2B%2B
总结规则:
- 返回
true
时,第一个参数放在前面,第二个参数放在后面。 - 返回
false
时,反之。 - 当
a
等于b
时,必须返回false
。
自定义比较器不能作为类成员函数定义在类中,这一点需要注意。此外,编写自定义比较器时,一定要仔细,避免遗漏任何情况,否则会导致排序出错。
补充说明:相等时返回 false
的原因是,sort
函数默认使用 std::less
条件类型比较。使用默认比较可以避免相等元素的排序问题,而自定义比较器则可以根据需求进行调整。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月20日 15时18分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java选择排序算法实现
2019-03-12
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
2019-03-12
00013.05 字符串比较
2019-03-12
LeetCode: 138. 复制带随机指针的链表(中等)[DFS, 迭代]
2019-03-12
Effective Java 读书笔记
2019-03-12
SpringBoot使用@Email报错误
2019-03-13
Rabbitmq的内存磁盘监控
2019-03-13
访问servlet时弹出文件下载框解决方法
2019-03-13
Java中的注释
2019-03-13
cookie、session、token
2019-03-13
IDEA-@Slf4j和log标签&@Data(Lombok)无效
2019-03-13
Thymeleaf 生成下标,索引,使用Stat变量
2019-03-13
全局变量初始化顺序的不确定性引发的bug
2019-03-13
ValueError: Unexpected end of file.
2019-03-13
六、登录(二)
2019-03-13
初始微服务---Springcloud发展【第一期】
2019-03-13
RAFT 拜占庭将军 共识算法
2019-03-13
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
2019-03-13