首页 > 后端开发 > C++ > 正文

c++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例

冰火之心
发布: 2025-10-27 19:30:03
原创
385人浏览过
在C++中,std::sort可通过自定义比较函数实现降序、结构体字段排序等复杂逻辑,支持函数指针、Lambda表达式和函数对象;例如用bool cmp(int a, int b) { return a > b; }可实现降序排序,Lambda可用于按字符串长度排序,结构体则可通过成员变量如分数进行排序,需注意保持严格弱序并避免修改外部状态。

c++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例

在C++中使用std::sort时,可以通过自定义比较函数来控制排序规则。默认情况下,sort按升序排列元素,但通过传入自定义的比较函数或函数对象,可以实现降序、结构体排序、字符串长度排序等复杂逻辑。

基本语法:自定义比较函数

自定义比较函数是一个返回bool类型的函数,接受两个参数,当第一个参数应排在第二个之前时返回true

示例:整数降序排序

#include <algorithm>
#include <vector>
#include <iostream>

bool cmp(int a, int b) {
    return a > b;  // 降序
}

int main() {
    std::vector<int> nums = {3, 1, 4, 1, 5};
    std::sort(nums.begin(), nums.end(), cmp);
    
    for (int x : nums) std::cout << x << " ";
    // 输出:5 4 3 1 1
}
登录后复制

使用Lambda表达式

Lambda让定义比较规则更简洁,适合简单逻辑。

示例:按字符串长度排序

std::vector<std::string> words = {"hi", "hello", "yes", "ok"};
std::sort(words.begin(), words.end(),
    [](const std::string& a, const std::string& b) {
        return a.length() < b.length();
    });

// 结果:hi ok yes hello(按长度升序)
登录后复制

对结构体或类进行排序

常用于根据对象的某个字段排序。

标书对比王
标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

标书对比王 58
查看详情 标书对比王

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

示例:按学生分数排序

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

std::vector<Student> students = {
    {"Alice", 85},
    {"Bob", 92},
    {"Charlie", 78}
};

std::sort(students.begin(), students.end(),
    [](const Student& a, const Student& b) {
        return a.score > b.score;  // 分数从高到低
    });

// 排序后:Bob(92), Alice(85), Charlie(78)
登录后复制

注意事项和技巧

写比较函数时需注意以下几点:

  • 比较函数必须是严格弱序,即不能出现a<b和b<a同时为真
  • 不要在比较中修改外部状态,避免未定义行为
  • 若频繁调用,建议使用函数对象(重载operator())提升性能
  • 可结合std::greater<>std::less<>等预定义函数对象简化代码

基本上就这些。掌握自定义比较函数后,就能灵活应对各种排序需求了。

以上就是c++++如何自定义sort函数的比较规则_c++ sort排序自定义比较函数示例的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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