std::sort 可通过自定义比较函数或 lambda 表达式实现灵活排序,如用 a > b 实现降序,或按字符串长度排序。

在C++中,std::sort 是一个高效且常用的排序函数,定义在 algorithm 头文件中。它默认对元素进行升序排列,但通过传入自定义比较函数,可以灵活控制排序规则。
自定义比较函数的基本用法
要使用自定义排序,需提供一个能比较两个元素的函数或函数对象。该函数接收两个参数,返回 true 表示第一个元素应排在第二个元素之前。
例如,对整数数组降序排序:
bool cmp(int a, int b) { return a > b; // a 排在 b 前面当 a 更大 } std::vector nums = {3, 1, 4, 1, 5}; std::sort(nums.begin(), nums.end(), cmp);
Lambda 表达式实现更简洁的自定义排序
C++11 起支持使用 lambda 表达式直接内联定义比较逻辑,无需额外函数。
立即学习“C++免费学习笔记(深入)”;
比如按字符串长度排序:
std::vectorwords = {“apple”, “hi”, “banana”}; std::sort(words.begin(), words.end(), [](const std::string& a, const std::string& b) { return a.length()
这段代码将字符串按长度从小到大排列。
结构体或类的自定义排序
对于复杂类型,可通过比较特定成员实现排序。例如有如下结构体:
struct Person { std::string name; int age; }; std::vector people = {{“Alice”, 25}, {“Bob”, 20}, {“Charlie”, 30}}; // 按年龄升序 std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { return a.age
也可扩展为先按年龄再按名字排序:
return a.age == b.age ? a.name
注意事项与常见错误
自定义比较函数必须满足严格弱序(strict weak ordering)关系,否则行为未定义。
不能对相同元素返回 true:cmp(a, a) 必须为 false 若 cmp(a, b) 为 true,则 cmp(b, a) 应为 false(除非相等) 避免浮点数精度问题影响比较结果
使用时建议保持比较逻辑简洁明确,优先使用 lambda 提高可读性。
基本上就这些。掌握自定义比较函数后,std::sort 可应对绝大多数排序需求。
以上就是c++++如何自定义排序算法_c++ std::sort与自定义比较函数的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1487848.html
微信扫一扫
支付宝扫一扫