C++容器之Priority queue

本文深入探讨了优先队列的概念,包括其作为容器适配器的应用,以及如何使用标准容器类如vector和deque来实现优先队列。文章还提供了示例程序,展示如何创建、操作和交换优先队列。

简介

         Priorityqueue是一种容器适配器,它的第一个元素始终是容器中的最大值。

         Priorityqueue作为容器适配器而实现,它是一种使用指定的容器类作为其潜在的容器存储元素,并提供一组元素操作函数的类。

         Priorityqueue的潜在容器可以是标准容器类,也可以是通过特殊设计的容器类。这些容器类必须满足能随机访问且支持如下操作:

Ø  front()

Ø  push_back()

Ø  pop_back()

标准容器vector和deque都能满足其要求。默认情况下,如果创建priority queue时没有指定容器类作为其潜在的容器,vector容器类将作为其默认的潜在类。

成员函数


priority_queue::priority_queue()

         创建一个priority_queue容器适配器对象。

priority_queue::empty()

         判断一个priority_queue是否为空,如果为空返回true,否则返回false。

priority_queue:size()

         计算priority_queu中元素的个数。

priority_queue::top()

         返回优先队列顶端的元素的引用。

priority_queue::push()

         向优先队列中插入一个新的元素。

priority_queue::emplace()

         向队列中插入一个元素,插入的元素有其构造函数构造。

priority_queue::pop()

         删除队列顶端的元素。

priority_queue::swap()

         交换两个队列中元素。

示例程序

#include <iostream>
#include <queue>
#include <deque>
#include <functional>

using namespace std;

class comparison{
public:
	comparison(const bool& revparam = false)
	{
		reverse = revparam;
	}
	bool operator() (const int& m, const int& n) const
	{
		if(reverse){
			return m > n;
		}else{
			return m < n;
		}
	}
private:
	bool reverse;
};

int main(void)
{
	int arr[] = {10, 50, 30, 20, 60};
	
	// priority_queue::priority_queue()
	priority_queue<int> first;
	priority_queue<int> second(arr, arr+5);
	priority_queue<int, vector<int>, greater<int>>
					third(arr, arr+5);					
	priority_queue<int, vector<int>, comparison> fourth;
	typedef priority_queue<int, vector<int>, comparison> pq_type;
	pq_type firth(comparison());
	pq_type sixth(comparison(true));
	
	// priority_queue::empty()
	if(second.empty()){
		cout << "Second is empty." << endl;
	}else{
		cout << "Second is not empty." << endl;
	}
	
	// priority_queue::size()
	cout << "The size of second : " << second.size() << endl;
	
	// priority_queue::top()
	cout << "second.top() is : " << second.top() << endl;
	
	// priority_queue::push()
	second.push(80);
	
	// priority_queue::emplace()
	second.emplace(100);
	
	// priority_queue::pop()
	cout << "second.top() is : " << second.top() << endl;
	second.pop();
	cout << "second.top() is : " << second.top() << endl;
	
	// priority_queue::swap()
	first.swap(second);
	cout << "The size of first : " << first.size() << endl;
	cout << "The size of second : " << second.size() << endl;
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值