首页 > 后端开发 > C++ > 正文

c++怎么对一个vector进行排序_c++容器排序算法与比较函数使用

穿越時空
发布: 2025-11-17 18:32:02
原创
579人浏览过
最常用方法是使用std::sort函数。通过#include<algorithm>引入,可对vector进行升序或降序排序;支持基本类型和自定义类型,结合比较函数或Lambda表达式实现灵活排序逻辑。

c++怎么对一个vector进行排序_c++容器排序算法与比较函数使用

在C++中对一个vector进行排序,最常用的方法是使用标准库中的std::sort函数。这个函数定义在<algorithm>头文件中,可以高效地对容器元素进行排序。根据元素类型和排序需求,可以使用默认排序规则,也可以自定义比较函数。

基本类型的vector排序

对于存储基本数据类型(如intdoublestring等)的vector,可以直接使用std::sort完成升序排序。

// 示例:对整数vector进行升序排序

#include <vector>
#include <algorithm>
#include <iostream>

std::vector<int> nums = {5, 2, 8, 1, 9};
std::sort(nums.begin(), nums.end());
// 结果:{1, 2, 5, 8, 9}

若要降序排序,可以传入std::greater<>()作为比较函数:

std::sort(nums.begin(), nums.end(), std::greater<int>());

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

Calliper 文档对比神器
Calliper 文档对比神器

文档内容对比神器

Calliper 文档对比神器 28
查看详情 Calliper 文档对比神器

自定义比较函数

vector中存储的是自定义类型(如结构体或类),或者需要特定排序逻辑时,需提供自定义比较函数。该函数应返回bool,表示第一个参数是否应排在第二个参数之前。

// 示例:按学生的成绩降序排序,成绩相同时按名字升序

struct Student {
    std::string name;
    int score;
};

bool compareStudents(const Student& a, const Student& b) {
    if (a.score != b.score) {
        return a.score > b.score; // 成绩高的在前
    }
    return a.name < b.name; // 成绩相同则名字字典序小的在前
}

std::vector<Student> students = {{"Alice", 85}, {"Bob", 90}, {"Charlie", 85}};
std::sort(students.begin(), students.end(), compareStudents);

使用Lambda表达式

C++11起支持Lambda表达式,可更简洁地定义比较逻辑,尤其适合临时排序需求。

// 示例:用Lambda对vector按绝对值升序排序

std::vector<int> values = {-3, 1, -5, 2};
std::sort(values.begin(), values.end(),
    [](int a, int b) { return std::abs(a) < std::abs(b); });
// 结果:{1, 2, -3, -5}

注意事项与技巧

使用std::sort时注意以下几点:

  • 确保传入的迭代器有效,且区间可随机访问(vector满足)
  • 自定义比较函数必须满足“严格弱序”规则,即不能存在循环依赖
  • 避免在比较函数中修改对象状态
  • 对于大对象,建议使用const引用传参以提升性能

基本上就这些。掌握std::sort配合函数、函数对象或Lambda的使用方式,就能灵活处理各种vector排序需求。不复杂但容易忽略细节,比如比较逻辑的正确性和效率。

以上就是c++++怎么对一个vector进行排序_c++容器排序算法与比较函数使用的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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