0

0

c++ STL算法库sort如何使用 对vector进行排序【实用教程】

穿越時空

穿越時空

发布时间:2026-01-10 13:10:35

|

169人浏览过

|

来源于php中文网

原创

std::sort可直接对vector快速排序,需传入合法迭代器范围和比较逻辑;默认升序、不稳定、原地排序,支持greater、lambda及自定义比较函数,须满足严格弱序。

c++ stl算法库sort如何使用 对vector进行排序【实用教程】

直接用 std::sort 就能对 std::vector 快速排序,不需要手写快排,也不用担心稳定性(默认不稳定),关键是要传对迭代器范围和可选的比较逻辑。

基础用法:升序排序

vector 这类内置类型,默认按数值从小到大排:

  • 头文件必须包含
  • 调用形式是 std::sort(起始迭代器, 结束迭代器),注意结束迭代器是“末尾后一位”,通常用 v.begin()v.end()
  • 原地排序,不返回新容器,直接修改原 vector
示例:
#include 
#include 
std::vector v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end()); // 排完后 v 变成 {1, 1, 3, 4, 5}

自定义降序排序

std::greater() 或 lambda 表达式实现从大到小排:

  • 用函数对象:std::sort(v.begin(), v.end(), std::greater())
  • 用 lambda 更灵活,比如对 vector 按长度降序:std::sort(v.begin(), v.end(), [](const string& a, const string& b) { return a.size() > b.size(); });
  • lambda 参数建议用 const 引用避免拷贝,尤其对 string、自定义类有效

对结构体或自定义类排序

核心是提供明确的“谁在前、谁在后”规则。有三种常用方式:

Taskade
Taskade

高颜值AI大纲和思维导图生成,为你的团队建立第二个大脑。

下载

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

  • 重载 operator:让类支持默认小于比较,之后直接 sort(v.begin(), v.end())
  • 传 lambda:适合一次性逻辑,例如按结构体某个成员排序:sort(v.begin(), v.end(), [](const Person& a, const Person& b) { return a.age
  • 传普通函数指针:适合复用逻辑,函数签名必须是 bool cmp(const T&, const T&)

注意事项和常见坑

几个容易出错但实际很关键的点:

  • 迭代器必须合法:不能对空 vector 调用 v.begin() 后再加偏移,但 v.begin() == v.end() 是安全的
  • 比较函数必须满足严格弱序(strict weak ordering):比如不能写 a ,也不能让 cmp(a,a) 返回 true
  • 如果需要稳定排序(相同元素相对位置不变),改用 std::stable_sort
  • vector 必须是随机访问容器(它确实是),所以 sort 效率是 O(n log n),比 list 的 sort 高效得多

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

384

2023.09.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

520

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

194

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

186

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

533

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

51

2025.08.29

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

80

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.6万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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