0

0

怎样使用C++的algorithm排序函数 sort与自定义比较函数实践

P粉602998670

P粉602998670

发布时间:2025-08-15 17:50:01

|

436人浏览过

|

来源于php中文网

原创

c++++的sort函数需配合自定义比较函数实现灵活排序。默认情况下,sort按升序排列元素,如std::sort(nums.begin(), nums.end())可对vector进行升序排序;要降序排序,可用std::greater()或自定义比较函数;对于结构体或类对象排序,需编写符合要求的比较函数,例如按学生分数从高到低排序可定义bool comparebyscore(const student& a, const student& b) { return a.score > b.score; };若需多条件排序,可在比较函数中添加判断逻辑;c++11后可用lambda表达式简化代码,如std::sort(students.begin(), students.end(), [](const student& a, const student& b) { return a.score > b.score;});此外,要注意比较函数必须满足“严格弱序”,避免未定义行为,并尽量使用引用传递参数以减少拷贝开销,而需要稳定排序时应使用stable_sort。

怎样使用C++的algorithm排序函数 sort与自定义比较函数实践

C++的

sort
函数是
库中最常用、最高效的排序工具之一,尤其在处理数组或容器(如
vector
)时非常方便。但如果你需要按照特定规则排序,比如降序、结构体字段比较等,就需要配合自定义比较函数一起使用。

怎样使用C++的algorithm排序函数 sort与自定义比较函数实践

下面我们就来看看怎么用

sort
和自定义比较函数完成各种排序任务。

怎样使用C++的algorithm排序函数 sort与自定义比较函数实践

一、基本用法:默认升序排序

sort
的基本调用方式是传入两个迭代器(起始和结束位置),它默认按升序排列元素:

立即学习C++免费学习笔记(深入)”;

#include 
#include 

std::vector nums = {5, 2, 9, 1, 3};
std::sort(nums.begin(), nums.end());

执行后,

nums
会变成
{1, 2, 3, 5, 9}

怎样使用C++的algorithm排序函数 sort与自定义比较函数实践

这适用于内置类型(如

int
double
)以及重载了
<
运算符的类对象。如果你只是排个整数数组,这样就足够用了。


二、如何实现降序排序?

想排成从大到小?可以使用标准库提供的

greater
函数对象:

std::sort(nums.begin(), nums.end(), std::greater());

或者你也可以自己写一个比较函数,效果是一样的。


三、自定义比较函数:灵活应对复杂排序逻辑

当你要排序的对象不是简单数字,而是结构体、类对象,或者有多个字段要综合判断时,就需要自己写比较函数。

Noya
Noya

让线框图变成高保真设计。

下载

比较函数格式要求:

比较函数应该接受两个参数,并返回一个布尔值。如果第一个参数应该排在前面,就返回

true

例如,我们有一个表示学生的结构体:

struct Student {
    std::string name;
    int score;
};

我们希望按分数从高到低排序:

bool compareByScore(const Student& a, const Student& b) {
    return a.score > b.score; // 分高的排前面
}

然后调用:

std::vector students = {{"Alice", 80}, {"Bob", 95}, {"Charlie", 70}};
std::sort(students.begin(), students.end(), compareByScore);

这样就能得到按成绩降序排列的学生列表。

注意:如果你想先按成绩排,成绩一样再按名字字母顺序排,可以在比较函数里加条件判断:if (a.score != b.score) return a.score > b.score; return a.name

四、使用lambda表达式简化代码

C++11以后支持用lambda来写比较函数,不需要单独声明函数,代码更简洁:

std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
    return a.score > b.score;
});

这对临时排序很有帮助,尤其是逻辑不复杂的时候。


五、注意事项与常见问题

  • 必须保证比较函数满足“严格弱序”,否则可能引起未定义行为。简单来说就是不能出现循环关系,比如A比B小、B比C小、C又比A小。
  • 如果排序的是结构体或类,记得传引用,避免拷贝开销。
  • sort
    不保证稳定排序,如果需要保持相同元素的原始顺序,要用
    stable_sort

基本上就这些内容了。掌握好

sort
加上合适的比较函数,不管是排序数字还是结构体,都能轻松应对。关键是理解比较函数的作用机制,以及如何根据需求写出正确的判断逻辑。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

223

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

84

2025.10.17

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

379

2023.09.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

519

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

193

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

185

2025.07.04

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

193

2025.06.09

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.1万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号