STL之priority_queue使用简介
2018-03-05 14:17
323 查看
优先队列容器也是一种从一端入队,另一端出对的队列。不同于一般队列的是,队列中最大的元素总是位于队首位置,因此,元素的出对并非按照先进先出的要求,将最先入队的元素出对,而是将当前队列中的最大元素出对。 C++ STL 优先队列的泛化,底层默认采用 vector 向量容器,使得队列容器的元素可做数组操作,从而应用堆算法找出当前队列最大元素,并将它调整到队首位置,确保最大元素出队。 堆算法(heap algorithm) 具有 nLog(n) 阶的算法时间复杂度,优先队列也可看作容器适配器,将底层的序列容器 vector 转换为优先队列 priority_queue. priority_queue 优先队列容器的 C++ 标准头文件也是 queue ,需要用宏语句 "#include <queue>" 包含进来。 同样是因为仅需取队首和队尾元素的操作,因此 priority_queue 优先队列容器也不提供迭代器,对其他任意位置处的元素进行直接访问操作。使用时,一般用 priority_queue<T> 的形式进行具现, T 是优先队列元素的一个具现类型。 创建 priority_queue 对象 使用 priority_queue 队列之前,要先利用构造函数生成一个优先对象,才可进行元素的入队、出对、取队首及队尾等操作。1. priority_queue() 默认的构造函数,创建一个空的 priority_queue 对象。例如,下面一行代码使用默认的 vector 为底层容器,创建了一个空的优先队列对象 pq ,数据元素为 int 类型。 priority_queue<int> pq; 2. priority_queue(const priority_queue&) 复制构造函数,用一个优先队列对象创建新的优先队列对象。例如,下面一行代码利用 priority_queue 对象 pq1 ,创建一个以双向链表为底层容器的 priority_queue 对象 pq2 。 // priority_queue<int, list<int> > pq1; priority_queue<int, list<int> > pq2(pq1); 元素入队 优先队列容器的元素入队函数也是 push 函数,它调用堆算法函数将入队的元素移至队列堆中的正确位置,保证队列优先级高的元素始终位于队首。优先队列也不预设固定的大小,因此 push 函数不判断队列空间是否已满,都将元素放入队列。push 函数不会返回元素入队是否成功的信息。 void push(const value_type& x) 元素出对 优先队列容器的元素出对函数为 pop 函数,将优先级最高的元素删掉。该函数不判断队列是否已为空,都试图将队首元素删除。一般要先判断队列不为空,才进行元素出对操作。 取队首元素 优先队列容器的 top 函数,可用来读取队首元素,即优先级最高的元素。这个函数实际是调用了底层容器的 front 函数。需要注意的是,优先队列容器并不提供获取队尾元素的函数。如下是 top 函数的使用原型。 const value_type& top() const 队列非空判断 优先队列的操作基本都要使用 empty 函数,判断入队和出对的优先队列是否为空,再作下一步的操作。如下是 empty 函数的使用原型。
#include <queue> #include <iostream> using namespace std; int main() { priority_queue<int> pq; pq.push(7); pq.push(19); pq.push(33); pq.push(26); pq.push(29); // 按优先级大小读取队列元素 while (!pq.empty()) { // 打印出 33 29 26 19 7 cout << pq.top() << ' '; pq.pop(); } cout << endl; return 0; }
相关文章推荐
- STL priority_queue使用简介
- STL之priority_queue使用简介
- C++ 标准模板库STL 优先级队列 priority_queue 使用方法与应用介绍(一)
- 【C++ STL应用与实现】13: 如何使用std::queue和std::priority_queue
- poj3253 Fence Repair 优先队列,C++STL中priority_queue的使用
- STL容器使用DEMO-priority_queue
- C++ STL入门教程(4)——stack(栈),queue(队列),priority_queue(优先队列)的使用(附完整程序代码)
- 如何使用STL PriorityQueue 优先队列
- std::priority_queue使用示例 STL
- STL 优先队列 priority_queue 的使用
- stl的heap和priority_queue的使用
- STL中优先级队列的使用priority_queue
- 从零开始学C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
- 【STL】c++ priority_queue的使用方法
- STL priority_queue使用
- STL优先级队列(priority_queue)和集合(set)的使用
- STL中的优先队列priority_queue的使用方法
- c++中STL之heap, priority_queue使用
- 从零开始学C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
- STL之priority_queue的使用