C++ 容器元素排序函数sort()
前言
std::sort()
是C++标准库提供了一个模板函数,这个函数用于对给定范围内的元素进行排序,默认情况下,它使用元素类型的 <
操作符来确定元素的顺序。如果元素类型不支持 <
操作符,或者你需要按照不同于 <
的顺序来排序,你可以提供一个自定义的比较函数或者比较函数对象或lambda。
具体使用
升序
sort默认是升序排列
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{ std::vector<int> vec = {4, 1, 3, 5, 2}; // 使用 std::sort 对 vec 进行排序 std::sort(vec.begin(), vec.end()); // 打印排序后的 vec for(int num : vec) { std::cout << num << ' '; } return 0;
}
降序
sort如果需要实现降序排列,则需要自己实现一个比较器(函数对象或lambda)
#include <algorithm>
#include <vector>
#include <iostream>
bool compare(int a, int b)
{ // 降序排序 return a > b;
} int main()
{ std::vector<int> vec = {4, 1, 3, 5, 2}; std::sort(vec.begin(), vec.end(), compare); for(int num : vec) { td::cout << num << ' '; } return 0;
}
扩展
如果想实现对自定义数据类型进行排序,则需要自己实现比较器
#include <algorithm>
#include <vector>
#include <iostream> struct people
{std::string name;int age;
}bool compare(people a, people b)
{ // 降序排序 return a.age > b.age;
} int main()
{ std::vector<people> vec;for(auto i = 1; i< 5; i++){people p;p.age = i;p.name = "asd" + std::to_string(i);}std::sort(vec.begin(), vec.end(), compare); sfor(people p : vec) { std::cout << p.name << ' ' << p.age << std::end;} return 0;
}
注意事项
std::sort
并不保证使用特定的排序算法,但它通常实现为高效的排序算法,如快速排序、堆排序或归并排序等。- 排序操作是就地进行的,不需要额外的存储空间来存储排序后的序列,也就是说空间复杂度为O(1)
- 排序操作的复杂度通常是 O(n log n),其中 n 是要排序的元素数量,具体情况取决于比较器