C++ sort()函数一些简单的用法

本文介绍C++ STL中的sort()函数使用方法及其自定义排序逻辑的方式。sort()函数可以方便地对数组进行排序,并支持自定义排序规则实现更复杂的排序需求。

C++标准函数模板库(stl)里有个自带的排序函数sort(),该函数可以直接对数组或者类似数组类型的结构体进行排序,其时间复杂度为n*log2(n);sort()函数定义在头文件<algorithm>中,基本用法为:sort(a,a+n);其中,a为一个数组的名称,n为需要排序的数组个数,数组默认起始下标为0;
sort函数默认为升序排列,它缺省了一个参数,如果想让它变为降序排列,需要自定义缺省的那个参数。

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

这样,调用函数sort(a,a+n,cmp),数组a就会默认已降序的排列方式进行排序。
如果我们需要有多个比较条件,例如我们自定义了一个结构体:

struct code
{
    string name;
    int score;
};

我们希望,当code的分数score不同时,对code数组按照降序方式排列;如果相同,则按照名字的升序排列。则需要自定义缺省参数为:

bool cmp (code a, code b)
{
    if (a.score == b.score) return a.name < b.name;
    else return a.score > b.score;
}

调用函数sort(code,code+n,cmp)就可以按照我们那个要求进行排序了。

### C++ 中 `sort()` 函数的使用方法 #### 基本概念 `sort()` 是 C++ 标准模板库(STL)中的一个函数模板,位于 `<algorithm>` 头文件中。此函数用于对数组或容器内的元素进行排序操作[^1]。 --- #### 函数原型 以下是 `sort()` 的几种常见形式: 1. **默认升序排序** ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last); ``` 参数解释: - `first`: 排序范围的第一个迭代器。 - `last`: 排序范围最后一个位置之后的一个迭代器(即不包含该位置上的元素)。 2. **自定义排序方式** ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); ``` 这里增加了一个第三个参数 `comp`,表示用户可以提供自己的比较逻辑来决定排序顺序[^2]。 --- #### 示例代码 ##### 例子 1: 对整型数组进行升序排列 ```cpp #include <iostream> #include <algorithm> int main(){ int n; std::cin >> n; int a[n]; for(int i=0;i<n;i++) { std::cin >> a[i]; } // 调用 sort() 函数,默认按升序排序 std::sort(a, a+n); for(int i=0;i<n;i++) { std::cout << a[i] << " "; } return 0; } ``` 上述程序读取一组整数并将其从小到大排序输出[^4]。 --- ##### 例子 2: 自定义降序排序 (通过 Lambda 表达式) 如果希望按照降序排列,则可以通过传递一个 lambda 表达式作为第三个参数给 `sort()` 来实现这一点: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ vector<int> v{5, 3, 8, 6, 9}; // 使用lambda表达式指定降序规则 sort(v.begin(), v.end(), [](const int& lhs, const int& rhs){ return lhs > rhs; }); for(auto num : v){ cout<<num<<" "; } return 0; } ``` 在这个版本中,我们利用了 STL 容器 `vector`, 并且借助匿名函数指定了新的比较准则——当左边大于右边时交换两者的位置. --- #### 反向排序的方法 除了上面提到的方式外,还可以直接调用预定义好的类对象来进行逆序处理。比如下面展示的是如何运用标准库里的 `std::greater<>` 实现同样的效果: ```cpp #include <functional> // 需要引入 functional 库支持 greater<T>() ... // 利用 std::greater 达成降序目的 sort(vec.begin(), vec.end(), std::greater<int>()); ``` 这里采用了泛化后的写法,适用于任何内置或者用户定义的数据类型[^5]。 --- ### 总结 综上所述,在实际开发过程中可以根据具体需求灵活选用不同的策略完成相应的任务;无论是简单的数值列表还是复杂的结构体集合都可以轻松应对!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值