前言
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); s
for(people p : vec)
{
std::cout << p.name << ' ' << p.age << std::end;
}
return 0;
}
注意事项
std::sort
并不保证使用特定的排序算法,但它通常实现为高效的排序算法,如快速排序、堆排序或归并排序等。- 排序操作是就地进行的,不需要额外的存储空间来存储排序后的序列,也就是说空间复杂度为O(1)
- 排序操作的复杂度通常是 O(n log n),其中 n 是要排序的元素数量,具体情况取决于比较器