使用自定义规则排序可通过函数对象、Lambda表达式或普通函数实现。1. 函数对象重载()操作符,适用于复杂逻辑;2. Lambda表达式简洁高效,推荐用于简单比较;3. 普通函数指针适合非成员函数场景。均需满足严格弱序要求,Lambda最常用,函数对象适合状态管理,普通函数适用简单情况。

在C++中使用std::sort函数时,如果想按照特定规则排序,比如按结构体某个成员排序、逆序排列或自定义比较逻辑,可以通过自定义排序规则实现。下面介绍几种常用方法。
定义一个类或结构体,重载()7>操作符,作为比较函数传入<code>sort。
#include <algorithm><br>#include <vector><br>struct Greater {<br> bool operator()(int a, int b) {<br> return a > b; // 降序<br> }<br>};<br><br>std::vector<int> nums = {3, 1, 4, 1, 5};<br>std::sort(nums.begin(), nums.end(), Greater());C++11起支持Lambda,写起来更简洁,适合简单逻辑。
示例:对pair按第二个元素升序
std::vector<std::pair<int, int>> vec = {{1,5}, {2,3}, {3,1}};<br>std::sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) {<br> return a.second < b.second;<br>});适用于非类成员函数,函数需接收两个参数,返回bool值。
立即学习“C++免费学习笔记(深入)”;
示例:结构体按年龄排序
struct Person {<br> std::string name;<br> int age;<br>};<br><br>bool cmp(const Person& a, const Person& b) {<br> return a.age < b.age; // 年龄小的在前<br>}<br><br>std::vector<Person> people = {{"Alice", 25}, {"Bob", 20}};<br>std::sort(people.begin(), people.end(), cmp);
a < b为真,则b < a应为假;不能同时返回true给cmp(a,b)和cmp(b,a)。[]即可,无需捕获外部变量。基本上就这些。Lambda最常用,代码紧凑易读;函数对象适合复杂状态管理;普通函数适合简单场景。根据需求选择合适方式即可。
以上就是c++++ sort函数怎么自定义排序规则_c++ sort自定义排序教程的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号