C++使用sort函数对容器进行降序排序
需积分: 2 162 浏览量
更新于2024-08-03
收藏 112KB DOCX 举报
"这篇文档主要介绍了在C++中如何使用`sort`函数对不同类型的容器进行排序,包括基本数据类型和自定义类型的容器,以及如何实现降序排序和对二维数组的排序。"
在C++编程中,`std::sort`函数是一个非常重要的工具,用于对容器中的元素进行排序。它属于STL(Standard Template Library)的一部分,包含在`<algorithm>`头文件中。`sort`函数的基本使用方法有两种,一种是默认排序,另一种是自定义排序。
### 默认排序
对于基本数据类型(如int、double等),`sort`函数可以直接使用,它会按照升序对元素进行排序。例如,对一个`vector<int>`进行排序:
```cpp
vector<int> v = {2, 0, 1, 5, 9, 2, 7};
sort(v.begin(), v.end());
```
这行代码等价于使用了小于仿函数`less<int>()`,将`v`中的元素从小到大排列。如果想要实现降序排序,可以使用`sort`的逆向迭代器或`greater<int>()`仿函数:
```cpp
sort(v.rbegin(), v.rend()); // 降序排列
sort(v.begin(), v.end(), greater<int>()); // 同上,使用greater仿函数
```
### 自定义排序
当容器中的元素是自定义类型或者复杂数据结构(如类对象)时,`sort`函数需要一个自定义比较函数作为第三个参数,以便确定排序规则。比较函数应接受两个元素并返回一个布尔值,表示前一个元素是否应该出现在后一个元素之前。
```cpp
struct MyCompare {
bool operator()(const MyClass& a, const MyClass& b) {
return a.someProperty < b.someProperty; // 根据someProperty进行比较
}
};
vector<MyClass> vec;
sort(vec.begin(), vec.end(), MyCompare());
```
### 二维数组排序
对于二维数组或`vector<vector<int>>`,默认情况下`sort`函数会按照第一列的元素进行排序。例如,对于一个按第一列升序排列的二维数组:
```cpp
vector<vector<int>> m = {{1, 4, 2}, {0, 8, 3}, {3, 5, 1}};
sort(m.begin(), m.end()); // 升序按第一列排序
```
如果需要按照降序排列第一列,可以使用`sort`的逆向迭代器:
```cpp
sort(m.rbegin(), m.rend()); // 降序按第一列排序
```
此外,STL还提供了其他比较仿函数,如`equal_to`、`not_equal_to`、`less_equal`和`greater_equal`,可以根据需要选择合适的方法进行排序。
C++中的`sort`函数是非常灵活的,既可以处理基本数据类型,也可以处理自定义类型,同时支持自定义排序规则。正确理解和使用`sort`函数,能够帮助我们更有效地对各种容器进行排序,提升代码的可读性和效率。在实际编程中,应根据具体情况选择最适合的排序方式。
2024-03-10 上传
2022-11-24 上传
2023-04-13 上传
2022-10-29 上传
2019-12-09 上传
2024-05-24 上传
2023-02-27 上传
2022-11-10 上传
2023-03-16 上传
ohmygodvv
- 粉丝: 507
- 资源: 4811
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程