#include<algorithm> sort()
1. 什么时候可以用sort()?
(1)当你需要对array/vector/deque这三个STL容器或普通数组中指定范围内的元素进行排序时
(2)对于指定范围内相同的元素 他们的相对位置可以发生改变
(如果要求相同元素的相对位置不能发生改变,可以用stable_sort() )
2. sort()的2种用法
(1) 对 [ first, last) 区域内的元素做默认的升序排序
sort(RandomAccessIterator first, RandomAccessIterator last);
(2) 按照指定的 comp 排序规则,对 [ first, last) 区域内的元素进行排序
sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
其中,first 和 last 都为随机访问迭代器, 用来指定要排序的目标区域;另外在第 2 种格式中,comp 可以是 C++ STL 标准库提供的排序规则(比如 std::greater<T>从大到小排序),也可以是自定义的排序规则。
3. 针对不同数据类型分别进行说明
(1)int / double / string 等(以int为例)
vector<int> v;
int arr[N];
从小到大排序:
sort(v.begin() , v.end());
sort(arr , arr + length);
从大到小排序:
sort(v.begin() , v.begin() + 4 , std::greater<int>());
sort(arr , arr + 4 , std::greater<int>());
(2)结构体
C++中,结构体是无法进行==,>,<,>=,<=,!=操作的,如果要使用这些操作符对结构体进行操作,有多种方式可以实现,这里我只介绍一种
以普通函数的形式实现自定义排序规则:
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct tt{
int age;
string name;
}T;
//从小到大排序
bool mycomp1(T& a,T& b){
return a.age < b.age;
}
//从大到小排序
bool mycomp2(T& a,T& b){
return a.age > b.age;
}
int main(){
T arr[] = {{3,"a"},{4,"b"},{2,"c"},{1,"d"},{7,"e"},{5,"f"}};
sort(arr,arr+6,mycomp1); //7 5 4 3 2 1
sort(arr,arr+6,mycomp2); //1 2 3 4 5 7
for(int i=0;i<6;i++){
cout << arr[i].age << " ";
}
return 0;
}