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

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());

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


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

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

FlowMuse AI

FlowMuse AI

节点式AI视觉创作引擎

FlowMuse AI 85

查看详情 FlowMuse AI

比较函数格式要求:

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

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

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

以上就是怎样使用C++的algorithm排序函数 sort与自定义比较函数实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1471290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 18:49:43
下一篇 2025年12月18日 18:49:47

相关推荐

发表回复

登录后才能评论
关注微信