C++中的sort函数

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;
}

猜你喜欢

转载自blog.csdn.net/qq_39905917/article/details/83097328