priority_queue的自定义排序与sort的自定义排序对比

先说sort,sort排序默认是升序,如果想降序,需要重写sort的第三个参数。
参考链接:C++使用sort函数进行自定义排序

//理解记忆:> 说明大的排在前面,即降序
bool cmp(node x, node y) {
	return x.a > y.a;
}
sort(v.begin(),v.end(),cmp);

通过上面的代码,就可以实现对数组v进行降序排序,注意cmp中的是 >,即通过>实现了降序。接下来和priority_queue进行比较。

再来说一下priority_queue
参考链接:c++优先队列(priority_queue)用法详解
定义:

priority_queue<Type, Container, Functional>

Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。

//降序队列,大顶堆,默认方式
//理解记忆:less是越来越小的意思,即降序,队头的数是最大的数,即大顶堆
priority_queue <int,vector<int>,less<int> >q;

//升序队列,小顶堆,非默认方式
//理解记忆:greater是越来越大的意思,即升序,队头的数是最小的数,即小顶堆
priority_queue <int,vector<int>,greater<int> > q;

priority_queue的自定义排序
方式1:运算符重载<

struct tmp1{
    int x;
    tmp1(int a) {x = a;}
    bool operator<(const tmp1& a) const {
        return x < a.x; //大顶堆
    }
};

方式2:重写仿函数

struct comp{
    bool operator() (tmp1 a, tmp1 b){
        return a.x < b.x; //大顶堆
    }
};

通过上面两种方式,实现了priority_queue的自定义排序。可以发现,两种方式中都是实现了大顶堆,而且是通过<实现的,我们直到大顶堆是降序的。

比较priority_queue的自定义排序与sort的自定义排序,可以发现,对于实现的都是降序的做法是不同的,sort是使用>,二priority_queue是使用<
之前一直弄混,现在明白了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值