priority_queue实现最大堆和最小堆

1、头文件

#include<queue>

2、模板

STL源码中,包含三个模板参数:类型、容器适配器、比较规则。

template <class T, class Container = vector<T>,
 class Compare = less<typename Container::value_type> > 
		  class priority_queue;
  1. 参数1: 优先级队列的元素类型 T ,例如问题里第一个例子,元素类型 T 是 std::pair<int,int> ,后面两个例子,元素类型 T 是 int
  2. 参数2: 优先级队列内部具体用那种容器(Container) 存储参数1指定的元素类型,例如问题里的 vector< pair<int,int> > 和 vector<int>。实际上,第2个模板参数是有默认类型参数的,默认类型参数是 vector<T> ,T 取决于参数1指定的类型是什么。
  3. 参数3: 参数3需要指定一个实现了 operator< 操作符的类(叫做仿函数或者函数对象,实际上就是类,只是调用时写起来像函数一样),比较操作符的实现符合 严格弱顺序 strict weak order  语义,请参考资料3。模板参数3也是有默认类型,默认是 std::less<typename Container::value_type> ,其中 Container 指的是参数2,Container::value_type 指的是参数2类内部的声明的其元素值的类型。

3、常见类型

class T为常见类型:数字、字符串(string)

priority_queue<int> pq;  //默认为最大堆,默认容器vector<int>

4、非基本类型(重写仿函数)

//less 建大堆,重载 <
template<class T>
struct Less 
{
	bool operator()(const T& left,const T& right)
	{
		return left < right;
	}
};

//greater 建小堆,重载 >
template<class T>
struct Greater
{
	bool operator()(const T& left, const T& right) 
	{
		return left > right;
	}
};

priority_queue<T,vector<T>,Less> pq;  //最大堆
priority_queue<T,vector<T>,Greater> pq;   //最小堆

4、常用函数

q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值