C++如何对vector进行排序?(std::sort函数示例)

12次阅读

std::sort是最常用vector排序方法,默认升序,传入begin()和end()迭代器;支持降序(greater或Lambda)、自定义类型(重载

C++如何对vector进行排序?(std::sort函数示例)

std::sortstd::vector 排序最常用也最直接,只需传入起始和结束迭代器,它默认按升序排列元素。

基础升序排序

对存储基本类型(如 intdouble)的 vector,直接调用 std::sort(vec.begin(), vec.end()) 即可:

  • 头文件需包含
  • vec.begin() 指向首元素,vec.end() 指向末尾之后的位置(左闭右开区间)
  • 原地排序,不额外分配空间,时间复杂度为 O(n log n)

降序排序

传入 std::greater() 作为第三个参数即可实现降序:

  • std::sort(vec.begin(), vec.end(), std::greater());
  • 也可用 lambda 表达式:[](int a, int b) { return a > b; }
  • 注意:lambda 需捕获为空,且返回 true 表示“a 应排在 b 前面”

对自定义类型排序

vector 存的是结构体或类,需明确比较逻辑:

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

  • 重载 operator:让类型支持默认升序
  • 或提供外部比较函数/lambda,例如按成员 name 字典序升序:
    std::sort(v.begin(), v.end(), [](const Person& a, const Person& b) { return a.name
  • 确保比较函数满足严格弱序(irreflexive、transitive、antisymmetric)

排序部分元素

只对子区间排序也很方便,比如只排后一半:

  • auto mid = vec.begin() + vec.size() / 2;
  • std::sort(mid, vec.end());
  • 注意迭代器有效性:确保 mid 不越界(vec.size() > 0
text=ZqhQzanResources