蓝桥杯常用STL之sort函数用法
1.基本用法
格式:sort(数组名+n1,数组名+n2)
对[n1,n2)区间内的元素继续排序,特别注意不包括n2,默认为由小到大排序.(升序)
若要由小到大排序(降序),sort(数组名+n1,数组名+n2,greater())
(T为基本数据类型)
2.特定规则用法
格式:sort(数组名+n1,数组名+n2,自定义规则)
@. sort(数组名+n1,数组名+n2,cmp)
bool cmp(int a,int b) //由小到大
{
return a<b;
}
bool cmp1(int a,int b) //由大到小
{
return a>b;
}
@@.sort(数组名+n1,数组名+n2,structRule)
此处补充排序规则结构体的定义格式:
struct 结构名{
bool operator()(const T &s1, const T &s2){
return 判断条件;
}
}; //T为数据类型,s1和s2为变量名,这个是模板,只用修改T、结构名、判断条件即可
举个例子
struct rule{
bool operator ()(const int &s1,const int &s2)const{
return s1<s2;
}
};
下面是代码实现
#include<iostream>
#include<algorithm> //用到sort函数,要写头文件
#include<vector>
using namespace std;
bool cmp(int a,int b)
{
return a<b; //由小到大
}
struct rule{
bool operator ()(const int &s1,const int &s2)const{
return s1<s2;
}
};
void sort1() //常规用法
{
int a[]={1,4,2,3,5};
int n=5;
sort(a,a+5); //默认由小到大排序 ,若要由大到小改为sort(a,a+5,greater<int>());
for(int i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}
void sort2() //自定义规则
{
int a[]={1,4,2,3,5};
int n=5;
sort(a,a+5,cmp); //按cmp的规则排序
for(int i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}
void sort3() //自定义排序规则结构体
{
int a[]={1,4,2,3,5};
int n=5;
sort(a,a+5,rule()); //按rule的规则排序
for(int i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}
void sort4() //用vector(需要有一定的c++基础)
{
vector<int> a; //创建动态数组
a.push_back(2); //动态数组放入元素
a.push_back(1);
a.push_back(3);
sort(a.begin(),a.end());
for(int i=0;i<a.size();i++)
{
printf("%d ",a[i]);
}
printf("\n");
vector<int>::iterator p; //用迭代器指向动态数组
for(p=a.begin();p!=a.end();p++)
{
printf("%d ",*p);
}
}
int main()
{
sort1();
printf("\n");
sort2();
printf("\n");
sort3();
printf("\n");
sort4();
return 0;
}