STL库中的优先队列

priority_queue是一个优先队列,优先级高的最先出队,默认最大值优先。内部实现为堆,因此出队和入队的时间复杂度均为O(logn)。可以自定义优先级控制出队顺序优先队列不支持删除堆中指定元素,只可以删除堆顶。需要引入头文件#include<queue>。

成员函数:

push(x):入队;

pop():出队;(把优先级最高的出队!)

top():取队头元素;

size():返回队中元素个数;

empty():判队空,若为空返回true;

priority_queue<int, vector<int> , cmp >que;

其中,第一个参数为数据类型,第二个参数为容器类型,第三个参数为比较函数。后两个参数根据需要也可以省略。

优先队列最常用的用法:priority_queue<int> que;//参数为数据类型,默认优先级(最大值优先)

有4种方法可以实现优先级控制:

1.使用C++自带的库函数<functional>。

2.有3种自定义优先级的方式。

一.使用C++自带的库函数<functional>,引用#include<functional>

equal_to<Type>//等于,Type为数据类型

not_equal_to<Type>//不等于

greater<Type>//大于

greater_equal<Type>//大于等于

less<Type>//小于

less_equal<Type>//小于等于

例:priority_queue<int,vector<int>, less<int> >que1;//最大值优先

注意“>>”会被认为错误,“>>”是右移运算符,注意用空格隔开。

priority_queue<int,vector<int>,greater<int> >que2;//最小值优先

二.

1.队列元素为数值型

  struct cmpl
{
   bool operator ()(int &a,int &b)//自定义操作符
  {
    return a<b;//最大值优先,a>b表示最小值优先
  }
};

创建优先队列:priority_queue<int,vector<int>,cmpl>que3,//最大值优先

2.队列元素为结构体型,运算符重载写在结构体内,参数只需要一个。

  struct node1
{
   int x,y;//结构体中的成员
   bool operator<(const node1 &a) const 
  {
    return x<a.x;
  }
};

注意这里有点不一样:上图中表示最大值优先,x>a.x;才表示最小值优先

创建优先队列:priority_queue<node1>que5;//使用时要把数据定义为node1类型

3.队列元素为结构体型,运算符重载写在结构体内外,参数需要两个。

 struct node3
{
   int x,y;//结构体中的成员
};
 bool operator <(const node3 &a, const node3 &b)//在结构体外面定义
{
   return a.x<b.x;//按成员x最大值优先
}

代码解释:重载<操作符,意思是如果a.x< b.x成立,那么结构体node3 a <node3 b成立。由于优先队列是按照从大到小排列,所以结构体b会排列到a之前,因为b.x是最大的,所以实现了按照x的从大到小排序

创建优先队列:priority_queue<node3>que7;//使用时要把数据定义为node3类型

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值