【C++】priority_queue优先队列

大家好,我是苏貝,本篇博客带大家了解C++的string类的priority_queue优先队列,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


1. 介绍

在这里插入图片描述

优先级队列priority_queue的底层是堆,默认情况下,是大堆。我们也可以传仿函数来让priority_queue为小堆

下面是默认情况下的priority_queue,为大堆。
注意:只是取出来的数据是有序的,但是优先级队列容器内不有序(因为大堆/小堆只是逻辑结构是树,事实上一般是用数组存储的)
在这里插入图片描述

下面我们想试试让priority_queue为小堆,需要传仿函数

在这里插入图片描述

2. 仿函数

(A) 介绍

先用仿函数,内容后面讲

想用仿函数greate,需要包头文件algorithm,这样priority_queue就是小堆
在这里插入图片描述

仿函数,顾名思义,是与函数类似的东西。事实上,它是一个类,但是它的对象能像函数一样使用,所以这种类叫仿函数。为什么可以让它的对象像函数一样使用呢?因为在该类里重载了()。
仿函数可以用struct,也可以用class,如果用class就要将访问限定符设为public
在这里插入图片描述

上图显示的是有名对象调用运算符重载(),匿名对象也可以

在这里插入图片描述

为了让类Less也能对其它类型进行判断,将它写成类模板

在这里插入图片描述

(B) 控制比较逻辑

仿函数可以控制比较逻辑。
如下:我们想要将下图的v排序

  1. 按价格升序排
  2. 按价格降序排
  3. 按评价升序排
  4. 按评价降序排

在这里插入图片描述

这种时候,我们就可以通过使用不同的仿函数来实现对不同方面进行比较

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

按价格降序排

在这里插入图片描述

按评价升序排
在这里插入图片描述

按评价降序排
在这里插入图片描述

3. priority_queue和sort的模板参数

观察我们让priority_queue为小堆写的第三个模板参数:仿函数greater。再来看看sort模板的模板参数
在这里插入图片描述

下面是降序的一种写法,还可以直接传greater的匿名对象
在这里插入图片描述
在这里插入图片描述

对比sort和priority_queue,我们发现,priority_queue传的是greater类,而sort传的是greater类的对象,这是因为它们的底层实现不同
在这里插入图片描述

函数模板的参数应该是对象,类模板的参数应该是类型

在这里插入图片描述


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值