c++ STL的简单用法总结(sort)
作者:互联网
用法1:
sort(数组名+n1,数组名+n2) ;这种就是简单的从小到大排序
(n1是开始排序位置的下标,n2是结尾位置的下标+1)
用法2:
sort(数组名+n1,数组名+n2,greater<T>);(T是要排序的数据类型)从大到小排序
用法3;
sort(数组名+n1,数组名+n2,排序规则结构名());这种就比较厉害了
这里举了一个例子 sort最强大的功能 :对结构进行排序 并且可以自定义排序规则
代码如下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>//使用STL算法需要引用的头文件
using namespace std;
typedef struct {
char name[20];
int id;
double gpa;
}student;//定义一个结构 包含学生姓名 id gpa;
student s[]={
{"JACK",112,3.4},{"MARRY",102,3.8},{"MARRY",117,3.9},
{"ALA",333,3.5},{"ZERO",101,4.0}
};//创建一个结构数组
//定义排序规则 1(结构类型)
//按名字字母排序
struct studentrule1{
bool operator()(const student&s1,const student&s2)const{
if(stricmp(s1.name,s2.name)<0)//stricmp和strcmp相比 stricmp忽略大小写字母顺序排序
{
return true;//如果s1.name比s2.name小的话 s1放在s2的前面
}else{
return false;
}
}
};
//定义排序规则2(结构类型)
//按学生id排序
struct studentrule2{
bool operator()(const student&s1,const student&s2)const{
return s1.id<s2.id;//如果s1.id<s2.id s1在s2的前面
}
};
//定义排序规则3(结构类型)
//按学生gpa从高到低排序
struct studentrule3{
bool operator()(const student&s1,const student&s2)const{
return s1.gpa>s2.gpa;//如果s1.gpa>s2.gpa s1放在s2的前面
}
};
//定义一个打印结构的函数
void print(student s[],int len){
for(int i=0;i<len;i++){
cout<<"("<<s[i].name<<","<<s[i].id
<<","<<s[i].gpa<<")"<<endl;
}
return ;
}
int main(){
int n=sizeof(s)/sizeof(s[0]);
cout<<"1)";
sort(s,s+n,studentrule1());print(s,n);//注意:sort(数组名+n1,数组名+n2,排序规则)n2是要排序的元素个数
//也就是末尾下标+1,而不是最后一个下标
//n1是开始排序位置的下标
cout<<endl<<"2)";
sort(s,s+n,studentrule2());print(s,n);
cout<<endl<<"3)";
sort(s,s+n,studentrule3());print(s,n);
return 0;
}
运行结果:
标签:sort,STL,s2,gpa,c++,数组名,student,排序 来源: https://blog.csdn.net/m0_66252872/article/details/122715530