使用前提:
头文件 #include <algorithm>
1.基本的sort函数
sort(首地址,尾地址,排序规则(可省略,省略默认从小到大))
其中排序规则为一个函数,返回值为0或1(true或false)
eg:
bool cmp(int a,int b)
{
return a > b;//从小到大
}
int a[] = {1,7,4,10,5};
sort(a,a+4,cmp);
2.结构体sort
eg:
struct node{
int x,y;
}s[10];
bool cmp(node a,node b){
return a.x>b.x;//自定义的排序规则
}
s[0].x=1;
s[0].y=7;
s[1].x=4;
s[1].y=5;
s[2].x=8;
s[2].y=3;
sort(s,s+3,cmp);
3.字符串sort
eg:
string str[3]={"aa","bb","cc"};
sort(str,str+3);//按照字典序进行排序
bool cmp(string a,string b)//按照字符串长度排序
{
return a.length()>b.length();
}
sort(str,str+3,cmp);
4.lower_bound()和upper_bound()
lower_bound()需要一个有序容器或者数组,其寻找[first,end)范围内第一个大于等于val的元素的位置,如果是数组就返回指针,如果是容器就返回迭代器。
upper_bound()需要一个有序容器或者数组,其寻找[first,end)范围内第一个大于val的元素的位置,如果是数组就返回指针,如果是容器就返回迭代器。
即:
lower_bound(起始地址,结束地址,val) ,返回的是数值第一个满足>= val 出现的位置。
upper_bound(起始地址,结束地址,val) , 返回的是数值第一个满足>val 的位置。
eg:
int a[]={2,3,5,8};
int *t1 = lower_bound(a,a+4,3);//结果为a[1](=3)的地址
int *t2 = upper_bound(a,a+4,3);//结果为a[2](=5)的地址
int it1=lower_bound(a,a+4,3)-a;//返回的结果是1(即为a[1],数组下标从0开始)
int it2=upper_bound(a,a+4,3)-a;//返回的结果是2(即为a[2],数组下标从0开始)