STL库中的优先队列

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

成员函数:

push(x):入队;

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

top():取队头元素;

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

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

priority_queue , cmp >que;

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

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

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

1.使用C++自带的库函数

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

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

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

not_equal_to//不等于

greater//大于

greater_equal//大于等于

less//小于

less_equal//小于等于

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

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

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

二.

1.队列元素为数值型

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

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

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

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

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

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

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

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

代码解释:重载<操作符,意思是如果a.x< b.x成立,那么结构体node3 a

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

你可能感兴趣的:(c++,蓝桥杯)