vector<int>排序
头文件:#include <algorithm>
示例如下,默认升序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<int>vec{5,4,6,9,8,1};
sort(vec.begin(), vec.end());// 默认升序
for(auto n:vec)
cout<<n<<" ";
return 0;
}
// 输出为 1 4 5 6 8 9
降序排列(最简单),只需补充
// 方法一:使用标准库比较函数对象
sort(vec.begin(), vec.end(), std::greater<int>());
其他几种自定义方法参考文档
// 方法二:使用自定义函数对象
struct {
bool operator()(int a, int b) const
{
return a > b;
}
} customLess;
sort(s.begin(), s.end(), customLess);
// 方法三:借助lambda表达
std::sort(s.begin(), s.end(), [](int a, int b) {
return a > b;
});
复杂度-->快速排序
vector多维数组比较
默认按照第一个维度排序
如果需要对其他维度排序,就需要自己写比较函数
这里用lambda表达来实现
vector<vector<int>>vec(5, vector<int>(5));//构造5x5数组
sort(vec.begin(), vec.end(), [](const vector<int>&a, const vector<int>&b){
return a[1]>b[1]; // 降序
});// 其他维度同理
vector结构体比较
自定义函数即可,举个简单的例子
我们希望按照结构体的id排序
struct stu{
int id;
int age;
string name;
};
bool sort_by_id(const stu &s1, const stu &s2){
return s1.id < s2.id; // 升序
}
保留相同元素相对位置比较
stl库中的sort使用的是快速排序(没记错的话),效率比较高
但是如果两个元素大小相同,可能会在排序的过程中相对顺序发生改变
快速排序是一个不稳定的算法,在经过排序之后,可能会对相同值的元素的相对位置造成改变。
因此,如果想保持相对位置不改变,可以使用stable_sort()
基本用法和sort差不多,具体案例见文档