2021-10-13更新
sort
sort 可以針對array或vector進行排列
基本用法
sort(iter first,iter last,cmp)
array
int a[10]={3,1,4,1,5,9,2,6,7,8,0};
sort(a,a+9);
//or
sort(a,a+sizeof(a)/sizeof(int));//可以自動計算陣列長度
sort(a,a+8);//也可以指定範圍做排序
vector
vector<int> v = {3,1,4,1,5,9,2,6,7,8,0};
sort(v.begin(),v.end())
使用sort(v.rbegin(),v.rend())
可以在排序後反轉,和使用sort後再reverse類似。
可以自訂比較函式進行排列
int a[10]={3,1,4,1,5,9,2,6,7,8,0};
bool cmp1(int a,int b){
return a>b;//i+1>i就交換 -> 升序
}
sort(a,a+10,cmp1)
int a[10]={3,1,4,1,5,9,2,6,7,8,0};
bool cmp2(int a,int b){
return a<b;//i+1<i就交換 -> 降序
}
sort(a,a+10,cmp2)
參考
lower_bound&upper_bound
lower_bound可以在 binary search 時用到
vector <int> v = {4,2,6,8,5,7,3,9};
sort(v.begin(),v.end())
要使用[[vector]]等資料結構,不能使用陣列,在執行前也要先排好。
auto low = lower_bound(v.begin(), v.end(), val);
auto up = upper_bound(v.begin(), v.end(), val);
使用[[auto]]自動判斷型態,val
指定大於等於其的最小值。
reverse
可以將array或vector順序反轉,和[[sort]]使用方式非常相似。
array
int a[10]={3,1,4,1,5,9,2,6,7,8,0};
sort(a,a+9);
//or
reverse(a,a+sizeof(a)/sizeof(int));
vector
vector<int> v = {3,1,4,1,5,9,2,6,7,8,0};
reverse(v.begin(),v.end())