c++ vector如何排序 c++ sort函数对vector排序【技巧】

发布时间 - 2025-12-31 00:00:00    点击率:
std::sort 对 std::vector 排序最直接高效,基础升序只需传入 begin() 和 end() 迭代器,默认按元素小于关系排序。

std::sortstd::vector 排序最直接、高效,关键在于传对迭代器和可选的比较规则。

基础升序排序(默认)

只需传入 begin()end() 迭代器,sort 默认按 比较,适用于内置类型或已重载 operator 的自定义类:

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

降序排序(用 greater

头文件 提供现成的函数对象:

  • std::sort(v.begin(), v.end(), std::greater()) —— 适用于数值类型
  • 等价写法:std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; })

自定义类型排序(lambda 或函数指针)

比如按结构体某个成员排序,推荐用 lambda 表达式,简洁且作用域清晰:

struct Person {
    std::string name;
    int age;
};
std::vector people = {{"Alice", 30}, {"Bob", 25}};
std::sort(people.begin(), people.end(), 
          [](const Person& a, const Person& b) { return a.age < b.age; });
// 按年龄升序
  • 捕获列表为空 [],不需外部变量时最安全
  • 参数加 const& 避免拷贝,提升性能
  • 返回 true 表示 a 应排在 b 前面(即 a 在 b 左侧)

注意:sort 要求随机访问迭代器,vector 完全满足

std::vector 的迭代器支持 +-[] 等操作,因此能用 std::sort(内部基于快速排序/堆排序/插入排序混合实现)。而 std::list 不行,得用其成员函数 sort()

不复杂但容易忽略


# c++  # sort  # 升序  # 迭代  # 只需  # 适用于  # 自定义  # 可选  # 不需  # 排在  # 关键在于  # 为空 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  如何在IIS中配置站点IP、端口及主机头?  魔方云NAT建站如何实现端口转发?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何在阿里云购买域名并搭建网站?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  ,交易猫的商品怎么发布到网站上去?  如何在建站主机中优化服务器配置?  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何在橙子建站中快速调整背景颜色?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何打造高效商业网站?建站目的决定转化率  Laravel如何使用.env文件管理环境变量?(最佳实践)  JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  详解Android图表 MPAndroidChart折线图  怎样使用JSON进行数据交换_它有什么限制  使用Dockerfile构建java web环境  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  如何在建站之星绑定自定义域名?  Laravel如何处理异常和错误?(Handler示例)  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何在建站之星网店版论坛获取技术支持?  php json中文编码为null的解决办法  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何用美橙互联一键搭建多站合一网站?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  深入理解Android中的xmlns:tools属性  Python进程池调度策略_任务分发说明【指导】  原生JS获取元素集合的子元素宽度实例  JavaScript如何实现倒计时_时间函数如何精确控制  浅谈redis在项目中的应用  如何用景安虚拟主机手机版绑定域名建站?  Python文件流缓冲机制_IO性能解析【教程】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议