C++中vector的sort用法

在C++中,std::vector对象可以通过std::sort函数来排序。std::sort是定义在<algorithm>头文件中的一个通用函数,可以对几乎所有类型的容器进行排序。它不是std::vector的成员函数,但可以直接作用于std::vector

基本用法很简单:提供std::sort函数的开始和结束迭代器,它会使用默认的比较运算符(通常是<)来对元素进行排序。你也可以提供自定义的比较函数来定义排序的规则。

下面是几个使用std::sortstd::vector排序的示例:

基本排序

cpp 复制代码
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> v = {4, 1, 3, 5, 2};

    std::sort(v.begin(), v.end());

    for (int i : v) {
        std::cout << i << " ";
    }

    return 0;
}

这段代码将输出排序后的向量:1 2 3 4 5

使用自定义比较函数

cpp 复制代码
#include <vector>
#include <algorithm>
#include <iostream>

bool customCompare(int a, int b) {
    return a > b;
}

int main() {
    std::vector<int> v = {4, 1, 3, 5, 2};

    std::sort(v.begin(), v.end(), customCompare);

    for (int i : v) {
        std::cout << i << " ";
    }

    return 0;
}

这段代码使用自定义比较函数customCompare对向量进行降序排序,输出将是:5 4 3 2 1

使用Lambda表达式

cpp 复制代码
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> v = {4, 1, 3, 5, 2};

    // 使用Lambda表达式进行降序排序
    std::sort(v.begin(), v.end(), [](int a, int b) {
        return a > b;
    });

    for (int i : v) {
        std::cout << i << " ";
    }

    return 0;
}

这段代码使用Lambda表达式作为自定义比较函数,同样实现了降序排序,输出为:5 4 3 2 1

以上就是std::sortstd::vector上的基本用法。你可以根据需要使用默认的排序规则或自定义排序规则。

Lambda表达式是C++中一个非常强大的特性,它允许你在需要函数对象的地方写一个匿名(无名)函数。在上述代码中,Lambda表达式被用作自定义比较函数,提供给std::sort函数以定义排序的规则。

Lambda表达式的基本语法如下:

cpp 复制代码
[ capture_clause ] ( parameters ) -> return_type { body }
  • capture_clause:捕获子句,定义了Lambda表达式可以从封闭作用域中捕获哪些变量以及如何捕获(值捕获、引用捕获等)。
  • parameters:参数列表,与普通函数的参数列表类似。
  • return_type:返回类型。这部分是可选的,如果Lambda体只包含一个返回语句,或者非常简单,编译器可以自动推断返回类型。
  • body:Lambda表达式的主体,包含函数的实际代码。

在上述例子中的Lambda表达式:

cpp 复制代码
[](int a, int b) {
    return a > b;
}
  • 捕获子句[]表示这个Lambda不捕获任何外部变量。
  • 参数(int a, int b),Lambda接收两个整数参数。
  • 返回类型 :未显式指定,由编译器从返回语句return a > b;自动推断为bool
  • 主体{ return a > b; },如果a大于b,返回true,否则返回false

这个Lambda表达式被用作std::sort的自定义比较函数,用于确定两个元素之间的排序顺序。在这个例子中,它指定了一个降序的排序规则。Lambda表达式使得在需要传递简单函数时代码更加简洁和清晰。

相关推荐
多加点辣也没关系8 小时前
JavaScript|第4章:类型转换
开发语言·javascript
聪慧的水蜜桃8 小时前
【YFIOs】用C#开发硬件之设备上云
开发语言·c#
yqcoder8 小时前
httpOnly 是什么,又有什么用?
开发语言·前端·javascript
山登绝顶我为峰 3(^v^)39 小时前
C/C++ 交叉编译方法
java·c语言·c++
wuqingshun3141599 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
飞猪~9 小时前
LangChain python 版本 第一集
开发语言·python·langchain
李燚11 小时前
Go 项目怎么组织:DDD 4 层 vs MVC vs 脚本式
开发语言·golang·mvc·ddd·agent框架·eino
2zcode12 小时前
免费开源项目文档:基于MATLAB图像处理的啤酒瓶口缺陷检测系统设计与实现
开发语言·图像处理·matlab
人工智能时代 准备好了吗12 小时前
AI回答内容进入率监测:引用识别、文本匹配与语义判断
开发语言·人工智能·python
LONGZETECH12 小时前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车