sort(a, a + n);//对数组区间为[0,n]的数据排序
sort(a + l, a + r);//对数组区间为[l,r]的数据从小到大排序
STL本身提供了一些比较函数,less 小于, greater 大于, less_equal 小于等于, greater_equal大于等于
sort(a, a + n, greater<int>());//对数组a从大到小排序
sort(a, a + n, less<int>());//对数组a从小到大排序
例如
int a[6];
for (int i = 0; i < 5; i ++ ) a[i] = i + 3;
sort(a, a + 5, greater<int>());//7 6 5 4 3
sort(a, a + 5, less<int>());//3 4 5 6 7
#include
#include
using namespace std;
//比较函数
bool cmp(int a, int b){
return a > b;
}
int main(){
int a[6];
for (int i = 0; i < 5; i ++ ) a[i] = i + 3;
sort(a, a + 5, cmp);//7 6 5 4 3
for (int i = 0; i < 5; i ++ ) cout << a[i] << ' ';
return 0;
}
struct Node{
int a, b, c;
}s[100];
bool cmp(Node x, Node y){
}
sort(a, a + n,cmp);
从begin() 开始到end()-1结束,二分查找第一个大于或等于num的元素,若找到就返回该元素的下标,若没有找到,返回end().
如:
int idx = lower_bound(a + L, a + R, value) - a;
在区间[L,R)
中查找,返回>=
value的第一个下标
第一个大于value的下标
int a[6];
a[0] = 1;a[1] = 2;a[2] = 3;a[3] = 4;a[4] = 4;a[5] = 5,a[6] = 6;
int L = equal_range(a + 1, a + 5, 4).first - a;//3
int R = equal_range(a + 1, a + 5, 4).second - a;//5
L为不破坏次序的前提下,value可插入的第一个位置
R为不破坏次序的前提下,value可插入的最后一个位置
因为[L,R)内的每一个元素都相等,所以[L,R)为value的最大区间
返回区间[L,R)内,二分查找是否找到元素value,找到就返回1
,没找到就返回0
常常结合do while来枚举数组排列
next_permutation(a, a + n);//产生长度为n的数组a的下一个排列
prev_permutation(a, a + n);//产生长度为n的数组a的上一个排列