std::
priority_queue
类模板 <queue>
template <class T, class Container = vector<T>,
class Compare = less<typename Container::value_type> > class priority_queue;
优先队列
优先队列是一种容器适配器,根据某种严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的元素。
此队列类似于堆,其中元素可以随时插入,并且只能检索最大的堆元素(优先队列中位于top的元素)。。
优先队列是作为容器适配器实现的,容器适配器是使用特定容器类的封装对象作为其底层容器的类,
提供了一组特定的成员函数来访问其元素。
元素从特定容器的“back”弹出,也就是优先队列的top 。
基础容器可以是任何标准容器类模板或其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,
并且支持以下操作:
-
empty
-
size
-
front
-
push_back
-
pop_front
标准容器类vector和deque满足了这些要求。
默认情况下,如果没有为特定的priority_queue类实例化指定容器类,则使用标准容器vector。
☲ 模板参数
-
T
-
所包含元素的类型。
别名为成员类型 queue::value_type。
-
Container
-
存储元素的内部基础容器对象的类型。
其value_type应为T。
别名为成员类型 priority_queue::container_type。
-
Compare
-
一个二元谓词,它接受两个元素(类型为T)作为参数并返回bool类型。。
表达式comp(a,b),其中comp是该类型的对象,a和b是容器中的元素,
如果a被认为按照函数定义的严格弱排序在b之前,则返回true。
priority_queue使用这个函数来维护以保留堆属性的方式排序的元素
(即,根据这种严格的弱排序,弹出的元素是最后一个)。
这可以是一个函数指针或一个函数对象,默认值为less<T>,
它返回的值与应用小于号操作符(a<b)相同。
☉ 成员类型
C++98:
成员类型 |
定义 |
注释 |
value_type |
起始模板参数(T) |
元素类型 |
container_type |
第二个模板参数(Container) |
基础容器的类型 |
size_type |
无符号整型 |
通常与size_t相同 |
C++11:
成员类型 |
定义 |
注释 |
value_type |
起始模板参数(T) |
元素类型 |
container_type |
第二个模板参数(Container) |
基础容器的类型 |
reference |
container_type::reference |
通常,value_type& |
const_reference |
container_type::const_reference |
通常,const value_type& |
size_type |
无符号整型 |
通常与size_t相同 |
☞ 成员函数
☣ 非成员函数重载
非成员类特化:
uses_allocator<queue> |
为priority_queue使用分配器(类模板) |