priotrity_queue

1.priority_queue

又称为优先队列,其底层是用堆来进行实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。
当然,可以在任何时候往优先队列里面加入元素,而优先队列底层的数据结构堆(heap)会随时调整结构,使得每次的队首元素都是优先级最高的,话不多说让我们一起来了解一下吧。

2.priority_queue 的定义

其定义的写法和其他STL容器相同, typename 可以是任意基本数据类型或容器:

priority_queue name;

3.priority_queue 容器内容器的访问

这里引入 priority_queue 常用函数 push(), top() ,pop(), empty(), q.size()的用法:
要使用优先队列,应先添加头文件

#include 

并在头文件下面加上:

using namespacestd;

和队列不同的是优先队列没有 front()函数与back()函数,而只能通过 top() 函数来访问队首元素
(也称堆顶元素),也就是优先级最高的元素。

#include
#include
using namespace std;
int main()
{
	priority_queue<int> q;
	q.push(3); //入队
	q.push(5);
	q.push(1);
	cout<<q.top()<<endl; //获取队首元素
	q.pop(); //令队首元素出队
	cout<<q.top()<<endl;
	if(q.empty())
	{
		cout<<"Empty"<<endl;
	}
	else
	{
		cout<<"Not empty"<<endl;
	}
	cout<<q.size()<<endl;
	return 0;
}

4.priority_queue 内元素优先级的设置:

优先队列最为强大的是它的排序功能,如何定义队列的优先级是运用好优先队列的关键,下面分别介绍
基本数据类型(例如:int char double)与结构体类型的优先级设置的方法。
基本数据类型的优先级设置:(即可以直接使用的数据类型),优先队列对他们的优先级设置一般是数字越大的优先级越高,因此队首是优先级最大的那个(如果是 char 类型,则是字典序最大的)。以int 型为例下面两种是等价的:

priority_queueq;
priority_queue<int,vector,less >q;

可以发现第二种定义方式的尖括号内多出了两个参数:其中 vector填写的是承载底层数据结构堆(heap)的容器,如果是其他类型 可写为 vector或vector;
第三个参数 less 则是对第一个参数的比较类,less 表示数字大的优先级越大,而 greater 表示数字小的优先级越大。

你可能感兴趣的:(C++,c++,队列)