c++ sort函数用法总结

函数

头文件

必须的头文件#include < algorithm>和using namespace std

参数含义

Sort函数有三个参数:(第三个参数可不写)

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

返回值

none

应用

1. 整型数组排序

①正序

int a[11]={0,1,2,3,4,5,6,7,8,9,10};
sort(a,a+11);

sort(a,a+11),表明要a[0]一直到a[10]的所有元素参与排序
当然,我们还可以截取部分元素参与排序。

int a[11]={0,1,2,3,4,5,6,7,8,9,10};
sort(a+4,a+11);

这样前面四个元素a[0] a[1] a[2] a[3]就不参与排序了.

注意:为什么从a[0]-a[10]排序,写的是sort(a,a+11)而不是sort(a,a+10)?为什么从a[4]-a[8]排序写的是sort(a+4,a+9)而不是sort(a+4,a+8)?

因为sort函数实际上传参传的是容器的开始迭代器与尾后迭代器。所以sort(a+5,a+9),是给a[5]到a[8]的元素排序,sort(a+m,a+n)是给从a[m]到a[n-1]的元素排序

②倒序
只需要自己写一个cmp函数,返回值是bool

bool cmp(int a,int b)
{
    return a>b;
}

然后给sort函数传入第三个参数就行啦

int a[11]={0,1,2,3,4,5,6,7,8,9,10};
sort(a,a+11,cmp);

2. string排序

同样的,我们需要的只是要写一个cmp函数
cmp函数中,如果要升序就 return 前一个元素 < 后一个元素,如果要降序就 return 前一个元素 > 后一个元素,同样适用于数组的排序

bool cmp(string a,string b)
{
    return a>b;
}

然后代入sort的第三个参数

string a[4]={"abcd","heheheh","xixixi","kkkkkk"};
sort(a,a+4,cmp);

3. 结构体数组及二级排序

定义一个结构体,本例中以狗狗结构体为例,要求实例化10只dog,并且按照先排公狗,后排母狗的规则排序。排序时先让年龄从大到小排序,如果年龄一样,再考按照体重从轻到重排。

struct Dog{
    int age;
    int weight;
    string sex;
};

写一个cmp函数

bool cmp(struct Dog a,struct Dog b)
{
    if(a.sex==b.sex){
        if(a.age==b.age){
            return a.weight<b.weight;//体重升序
        }
        else return a.age>b.age;//年龄降序
    }
    else return a.sex>b.sex;//性别字典序降序
}

然后传入函数参数

struct Dog dog[10];
sort(dog,dog+10,cmp);

猜你喜欢

转载自blog.csdn.net/Caiyii530/article/details/105211228