C++使用sort函数对容器进行降序排序
需积分: 2 92 浏览量
更新于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
最新资源
- 掌握Jive for Android SDK:示例应用的使用指南
- Python中的贝叶斯建模与概率编程指南
- 自动化NBA球员统计分析与电子邮件报告工具
- 下载安卓购物经理带源代码完整项目
- 图片压缩包中的内容解密
- C++基础教程视频-数据类型与运算符详解
- 探索Java中的曼德布罗图形绘制
- VTK9.3.0 64位SDK包发布,图像处理开发利器
- 自导向运载平台的行业设计方案解读
- 自定义 Datadog 代理检查:Python 实现与应用
- 基于Python实现的商品推荐系统源码与项目说明
- PMing繁体版字体下载,设计师必备素材
- 软件工程餐厅项目存储库:Java语言实践
- 康佳LED55R6000U电视机固件升级指南
- Sublime Text状态栏插件:ShowOpenFiles功能详解
- 一站式部署thinksns社交系统,小白轻松上手