C++中的sort函数

#include<iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
void print(int num[],int n);
void print(vector<int> v);
void print(string s);
struct stu
{
int age;
int height;
void print()//自定义函数
{
cout<<age<<' '<<height<<endl;
}
friend bool operator < (stu a,stu b)//重载小于运算符,重载运算符内容可以自行百度慢慢学习,C++可以重载很多运算符,非常有用。
{ //值得注意的是,从在运算符在sort和priority_queue里的效果完全相反,
//这是因为优先队列是基于堆的实现(其规则的正反效果和堆的类型直接相关,
//而sort只是对两者进行比较,不符合规则的进行交换(逻辑上的交换,实际做法和内部采用的算法有关,
//但不会对顺序有影响。
if(a.age==b.age)
return a.height<b.height;
return a.age<b.age;
}
};
bool cmp(stu a,stu b)
{
if(a.age==b.age)
return a.height>b.height;
return a.age>b.age;
}
int main()
{
//sort讲解

//sort是STL中对多种排序算法的封装,在大部分情况下比我们自己实现排序算法要快

//使用方式
//sort(首地址,末地址,比较函数(对于字符串、数组等C++默认了大小原则的可以省略);
int num[]={5,4,3,2,1};
sort(num,num+5);//对数组
print(num,5);

vector<int> v(num,num+5);
reverse(v.begin(),v.end());//对vector
sort(v.begin(),v.end());
print(v);

string s="54321";
sort(s.begin(),s.end());//对string
cout<<s<<endl;

stu peo[5]={{17,180},{16,170},{18,190},{17,140},{18,180}},stuTemp;
sort(peo,peo+5);//对结构体(这里没有加cmp因为在结构体定义中重载了运算符
for(int i=0;i<5;i++)
peo[i].print();
cout<<endl;
sort(peo,peo+5,cmp);//这里调用cmp函数进行比较,观察cmp函数和重载运算符的代码区别,以及输出内容的区别。
for(int i=0;i<5;i++)
peo[i].print();
return 0;
}
void print(int num[],int n)
{
for(int i=0;i<n;i++)
cout<<num[i]<<' ';
cout<<endl;
}
void print(vector<int> v)
{
for(int i=0;i<v.size();i++)
cout<<v[i]<<' ';
cout<<endl;
}