今天刷题碰到了优先队列(堆),在此记录总结一下。
概念
priority_queue
是 C++ STL 中的一个容器适配器,它是一个优先队列,可以用于实现堆(heap
)数据结构。它的元素按照指定的比较函数的优先级排序,最高优先级的元素总是在队列的前面。
定义方式
priority_queue<Type, Container, Functional>;
Type是要存放的数据类型;
Container是实现底层堆的容器,必须是数组实现的容器,如vector、deque;
Functional是比较方式/比较函数/优先级。
priority_queue<Type>;
此时默认的容器是vector,默认的比较方式是大顶堆less<type>
举例
//小顶堆
priority_queue <int,vector<int>,greater<int> > q;
//大顶堆
priority_queue <int,vector<int>,less<int> >q;
//默认大顶堆
priority_queue<int> a;
//pair
priority_queue<pair<int, int> > a;
pair<int, int> b(1, 2);
pair<int, int> c(1, 3);
pair<int, int> d(2, 5);
a.push(d);
a.push(c);
a.push(b);
while (!a.empty())
{
cout << a.top().first << ' ' << a.top().second << '\n';
a.pop();
}
//输出结果为:
2 5
1 3
1 2
常用函数
top()
:返回队列顶部的元素的引用,即最高优先级的元素。
pop()
:移除队列的第一个元素,即优先级最高的元素。
push()
:将一个元素添加到队列的末尾,并根据元素的优先级重新调整队列,使队列中优先级最高的元素位于队列的前面。
emplace()
:在队列的末尾构造一个新的元素,并根据元素的优先级重新调整队列,使队列中优先级最高的元素位于队列的前面。
empty()
:如果队列为空,则返回 true
,否则返回 false
。
size()
:返回队列中元素的数量。