📅  最后修改于: 2023-12-03 15:29:49.894000             🧑  作者: Mango
C++ STL
中的 sort()
函数可以对数组或容器中的元素进行排序,是一种非常实用和高效的算法。本文将为您介绍 C++ sort
函数的基本用法,并针对常见使用场景提供一些实用的技巧和注意事项。
sort()
函数位于头文件 algorithm
中,其基本用法为:
#include <algorithm>
using namespace std;
sort(begin, end[, cmp]);
其中:
begin
:需排序的起始位置。end
:需排序的结束位置(不包含此位置元素)。cmp
:排序方式,可选参数。默认从小到大排列(即 less<int>()
)。例如,对一个 vector
容器进行从小到大排序:
vector<int> nums = {3, 4, 1, 5, 2};
sort(nums.begin(), nums.end());
或者从大到小排序:
sort(nums.rbegin(), nums.rend());
sort()
函数还可以传入一个 cmp
函数作为第三个参数,用于自定义排序规则。cmp
函数需接受两个参数,返回值为布尔类型,用于比较两个元素的大小关系。
例如,对一个字符串 vector
容器进行按长度排序:
vector<string> words = {"apple", "banana", "grape", "orange", "watermelon"};
bool cmp(string& a, string& b) {
return a.length() < b.length();
}
sort(words.begin(), words.end(), cmp);
对于结构体数组,我们可以基于其中一个成员变量进行排序:
struct Student {
string name;
int score;
};
bool cmp(Student a, Student b) {
return a.score > b.score;
}
int main() {
vector<Student> students = {{"Alice", 90}, {"Bob", 80}, {"Cathy", 70}};
sort(students.begin(), students.end(), cmp);
return 0;
}
sort()
函数的时间复杂度为 O(nlogn),相对于其它排序算法有较高的效率。sort()
并不保证排序前后元素的相对顺序,如果需要保证序列的稳定性,可以使用 stable_sort()
,但其执行时间可能会长一些。sort()
函数对内存占用较大,遇到大数据时需要慎重使用,考虑优化算法或分块处理。sort()
函数必须能够访问所有元素,因此只适用于进行内部排序,无法对文件或流进行排序。C++ sort
函数是一种非常实用和强大的排序算法,可以帮助程序员快速、高效地进行排序操作。我们在使用 sort()
函数时,应该注意选择合适的排序方式和参数,并避免使用不必要的内存和时间。希望本文对大家有所启发,如有不足之处,欢迎指正和补充。