STL特点:
1.包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组、链表、字典等。
2.使用方便,效率较高。
3.通常使用#algorithm库
用sort进行排序:
·对基本类型的数组从小到大排序:sort(数组名+n1,数组名+n2)
·n1和n2都是int类型的表达式,可以包括变量
·如果n1=0,则+n1可以不写
PS:将数组下标范围[n1,n2)的元素从小到大排序。下标n2元素不在排序范围内
e.g:
int a[]={15,4,3,9,7,2,6};
sort(a,a+7);//对整个数组从小到大排序
int a[]={15,4,3,9,7,2,6};
sort(a,a+3);//结果:{3,4,15,9,7,2,6}
int a[]={15,4,3,9,7,2,6};
sort(a+2,a+5);//结果:{15,4,3,7,9,2,6}
对元素类型为T的基本数组类型从大到小排序:
sort(数组名+n1,数组名+n2,greater<T>());
比如:
int a[]={15,4,3,9,7,2,6};
sort(a+1,a+4,greater<int>());//结果:{15,9,4,3,7,2,6}
来一个完整的用法:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct Student{
char name[20];
int id;
double gpa;
};
Student students[]={
{"Jack",112,3.4},{"Mary",102,3.8}
};
struct StudentRule1{
bool operator()(const Student &s1,const Student &s2){
//这种写法强行记住就行,不用深层次理解
if(stricmp(s1.name,s2.name)<0)//按字典顺序比较姓名先后
return true;
return false;
}
};
struct StudentRule2{
bool operator()(const Student &s1,const Student &s2){
return s1.id<s2.id;
}
};
void PrintStudents(Student s[],int size)
{
for(int i=0;i<size;++i)
cout<<s[i].name<<" "<<s[i].id<<" "<<s[i].gpa;
cout<<endl;
}
int main()
{
int n=sizeof(students)/sizeof(Student);
sort(students,students+n,StudentRule1());//按姓名从小到大排
PrintStudents(students,n);
sort(students,students+n,StudentRule2());//按id从小到大排
PrintStudents(students,n);
return 0;
}