c++中sort函数怎么用_c++标准库排序算法【技巧】-C++

C++ 的 std::sort 默认升序排列,要求随机访问迭代器和可比较元素类型;支持自定义比较,如按绝对值排序:[](int a, int b) { return abs(a)

直接说结论:C++ 的 std::sort 默认按升序排列,必须传入随机访问迭代器(如 vector、array、原生数组指针),且元素类型需支持 比较;用错容器或自定义类型不重载比较逻辑,会编译失败或行为未定义。

怎么调用 std::sort 最基本的写法

它在 头文件里,接受两个迭代器(左闭右开区间):

#include 
#include 

std::vector v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end()); // 升序:{1, 1, 3, 4, 5}

注意:v.end() 是末尾后一个位置,不是最后一个元素——这是所有 STL 算法的通用规则。对原生数组也一样:

int arr[] = {3, 1, 4};
std::sort(arr, arr + 3); // 必须手动算长度,不能写 std::sort(arr, std::end(arr))
  • 只支持随机访问迭代器:list、forward_list 不能直接用 std::sort,得用各自的 sort() 成员函数
  • 时间复杂度平均 O(n log n),最坏情况仍是 O(n log n)(C++11 起要求必须是“接近最优”的实现,通常为 introsort)
  • 不稳定排序:相等元素的相对顺序可能改变

自定义排序规则:传函数对象或 lambda

第三个参数可以是任何可调用对象,只要接受两个同类型参数并返回 bool:

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

// 降序
std::sort(v.begin(), v.end(), std::greater{}); 

// 自定义 lambda(捕获为空时可省略 [])
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

// 按绝对值排序
std::sort(v.begin(), v.end(), [](int a, int b) { return abs(a) < abs(b); });
  • lambda 捕获外部变量要小心:若排序过程中容器被移动(如 vector realloc),捕获的引用/指针可能失效
  • 函数对象(如 std::greater)比 lambda 更轻量,无状态时优先选
  • 不能传普通函数指针以外的非静态成员函数——语法不匹配,编译报错类似 “no matching function for call to ‘sort’”

对结构体或类排序:必须明确比较逻辑

默认情况下,std::sort 对自定义类型调用 operator。没定义就会编译失败:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » c++中sort函数怎么用_c++标准库排序算法【技巧】-C++
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4009475+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4009475+
  • 本周更新: 0+
  • 最后更新: 2026-03-16