STL中的序列式容器——priority_queue(优先队列)

STL中的序列式容器——priority_queue(优先队列)

  priority_queue,即“优先队列”。普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。
  priority_queue是C++ STL的一个重要成员,使用它时需要包含头文件:

#include <queue>;

  priority_queue是容器适配器的一种,容器适配器中的数据是以不同优先级的方式组织的。

一、priority_queue 的初始化

有以下方式,举例说明如下:

queue<int> a;
queue<int> b(a); //拷贝队列a给队列b

二、priority_queue 对象的重要操作

列举如下:

a.push(5); //将5压入队列的末端
a.pop(); //弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
a.top(); //返回优先队列中有最高优先级的元素
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
a.size(); //返回队列的长度
a=b; //队列b赋值给队列a

三、优先级的设定

可以有以下几种方式,列举如下:

struct cmp1
{
    
    
    bool operator ()(const int &a,const int &b)
    {
    
    
       return a>b;//最小值优先
   	}
};
struct cmp2
{
    
    
	bool operator ()(const int &a,const int &b)
	{
    
    
	    return a<b;//最大值优先
	}
};
struct node1
{
    
    
	int u;
	bool operator < (const node1 &a) const
	{
    
    
		return u>a.u;//最小值优先
	}
};
struct node2
{
    
    
	int u;
	bool operator < (const node2 &a) const
	{
    
    
		return u<a.u;//最大值优先
	}
};
priority_queue<int>q1;//采用默认优先级构造队列,最大值优先
priority_queue<int,vector<int>,cmp1>q2;//最小值优先 
priority_queue<int,vector<int>,cmp2>q3;//最大值优先
priority_queue<int,vector<int>,greater<int> >q4;//最小值优先
//注意“>>”会被认为错误,因为这是右移运算符,所以这里用空格号隔开
priority_queue<int,vector<int>,less<int> >q5;//最大值优先
priority_queue<node1>q6;//最小值优先
priority_queue<node2>q7;//最大值优先

猜你喜欢

转载自blog.csdn.net/hyl1181/article/details/108567373