C++使用sort函数对容器进行降序排序

需积分: 2 1 下载量 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`函数,能够帮助我们更有效地对各种容器进行排序,提升代码的可读性和效率。在实际编程中,应根据具体情况选择最适合的排序方式。