STL容器与算法 (七)Priority Queues(优先队列)知识点

C++ Priority Queues

priority_queue 是“优先队列”。它和普通队列的区别在于,优先队列的队头元素总是最大的——即执行 pop 操作时,删除的总是最大的元素;执行 top 操作时,返回的是最大元素的引用。

priority_queue 是采用“堆技术”技术实现的,其内部并非完全有序,但却能确保最大元素总在队头。因此,priority_queue 特别适合用于不停的在一堆元素中取走最大的元素,priority_queue插入和删除元素的复杂度都是O(log(n))。它的队头元素只能被查看或者修改,不能被删除。


头文件

queue 和 priority_queue 都是容器适配器,要使用它们,必须包含头文件 。

#include<iostream>
#include<queue>
using namespace std;

成员函数

  • push()

语法:

void push( const TYPE &val );

push()函数添加一个元素到优先队列中,值为val。

  • pop()

语法:

void pop();

pop()函数删除优先队列中的第一个元素。

  • size()

语法:

size_type size();

size()函数返回优先队列中存储的元素个数

  • top()

语法:

TYPE &top();

top()返回一个引用,指向优先队列中有最高优先级的元素。注意只有pop()函数删除一个元素。

  • empty()

语法:

bool empty();

empty()函数返回真(true)如果优先队列为空,否则返回假(false)。

#include<iostream>
#include<queue>
using namespace std;
 
int main()
{
	priority_queue<double> pq;
	pq.push(1.1);
	pq.push(2.2);
	pq.push(3.3);
	pq.push(4.4);
	pq.push(4.4);
	while(!pq.empty()){
		cout << pq.top() << " ";   //输出队头 
		pq.pop();                  //删除队头 
	}
	cout << endl;
	priority_queue<double,vector<double>,greater<double> > pq1;
	pq1.push(3.3);
	pq1.push(1.1);
	pq1.push(3.3);
	pq1.push(5.5);
	pq1.push(4.4);
	while(!pq1.empty()){
		cout << pq1.top() << " ";   //输出队头 
		pq1.pop();                  //删除队头 
	}
	cout << endl; 
	
	system("pause");
	return 0;
}

输出结果:
在这里插入图片描述

原创文章 50 获赞 139 访问量 2万+

猜你喜欢

转载自blog.csdn.net/diviner_s/article/details/104348455