本篇我们来介绍一下优先级队列 priority_queue 。优先级队列的底层是数据结构中的堆,在C++中它是一个容器适配器,这个容器适配器比之前的栈和队列更复杂。
1.priority_queue的介绍
1.1 优先级队列的底层
因为优先级队列就是堆,堆的底层是数组,所以优先级队列的默认适配器也是数组。
需要用到访问下标的,数组一定是最好的选择。不了解堆的,建议先看下面这篇博客。
数据结构中的堆:【数据结构】堆的概念、结构、模拟实现以及应用
1.2 文档介绍
文档介绍:priority_queue - C++ Reference
在C++中优先级队列的相关接口就是如上这些。这里的top,如果大的值优先级高,也就是大堆,top返回的就是堆里面的最大值,如果是小的数优先级高,也就是小堆,返回的就是最小值。
2.priority_queue的使用
使用优先级队列的时候需要包含头文件 #include <queue>
priority_queue<int> pq;
pq.push(5);
pq.push(2);
pq.push(1);
pq.push(10);
pq.push(8);
pq.push(4);
数据结构中的实现逻辑如下。 用到的是向上调整算法。
再通过top和pop的配合,把这些数打印出来。
while (!pq.empty())
{
cout << pq.top() << " ";
pq.pop();
}
cout << endl;
优先级队列默认大的值优先级高,在数据结构中的意思就是,默认为大堆。
如果想换成小的优先级高,就是小堆,我们就要传greeter。
priority_queue<int, vector<int>, greater<int>> pq;
改成greater,用同样的用例试试。
结果就是升序排列。
在数据结构中小堆就是要用到