C++ STL sort教程:从大到小排序容器

需积分: 2 0 下载量 124 浏览量 更新于2024-08-03 收藏 115KB DOCX 举报
"这篇文档详细介绍了如何在C++中使用`sort`函数对常见的容器如vector、map和list进行排序,包括使用默认的升序排序和自定义降序排序规则。文档提供了示例代码,展示了如何操作数组和使用STL提供的排序规则。" 在C++编程中,`sort`函数是一个非常重要的工具,它允许程序员对容器中的元素进行快速排序。`sort`函数是C++ STL(Standard Template Library,标准模板库)的一部分,位于`<algorithm>`头文件内。要使用`sort`函数,首先需要包含这个头文件。 `sort`函数的基本形式有两种: 1. 对于默认的升序排序,函数原型如下: ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last); ``` 这里的`first`和`last`是待排序区间的两个迭代器,`first`指向区间起始位置,`last`指向区间结束位置之后的一个位置,即`(first, last)`表示一个左闭右开的区间。 2. 如果需要自定义排序规则,可以提供第三个参数`Compare comp`,例如使用`std::greater`进行降序排序: ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); ``` `comp`是一个比较函数对象,它可以是C++ STL提供的如`std::greater`,也可以是用户自定义的比较函数。 例如,对于一个整数数组的降序排序,可以这样做: ```cpp int arr[] = {2, 6, 3, 5, 4, 8, 1, 0, 9, 10}; sort(arr, arr + 10, std::greater<int>()); ``` 这将按照降序排列数组元素,输出结果为: ``` 10 9 8 6 5 4 3 2 1 0 ``` 对于STL容器,如vector、map和list,`sort`函数的使用方法类似,但需要注意每个容器的迭代器类型不同。例如,对于`vector<int>`,可以这样使用: ```cpp std::vector<int> vec = {2, 6, 3, 5, 4, 8, 1, 0, 9, 10}; sort(vec.begin(), vec.end()); ``` 对于`map`,由于`map`内部已经有序,通常不需要使用`sort`,但如果你确实需要,可以先将map的元素转换到一个`vector`或`pair`序列,然后对其进行排序。对于`list`,同样可以调用`sort`函数,但是由于`list`的迭代器特性,其排序效率可能不如`vector`。 对于自定义排序规则,你可以创建一个返回布尔值的函数,用于比较两个元素的顺序,例如: ```cpp bool customCompare(int a, int b) { return a % 2 < b % 2; // 偶数在前,奇数在后的排序规则 } std::vector<int> vec = {2, 6, 3, 5, 4, 8, 1, 0, 9, 10}; sort(vec.begin(), vec.end(), customCompare); ``` 这将按照偶数在前,奇数在后的规则排序`vec`。 `sort`函数是C++中非常实用的排序工具,能够灵活地应用于各种数据结构和自定义排序需求,极大地提高了代码的可读性和灵活性。理解并掌握其用法对于C++开发者来说至关重要。