admin管理员组

文章数量:1623789

C++数据结构---priority_queue(优先队列,堆)

  • 1. 什么是priority_queue(优先队列,堆)
  • 2. 如何使用

1. 什么是priority_queue(优先队列,堆)

普通的队列的性质是先进先出,元素在队列尾加入,在队头弹出。但是在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级的元素先出的行为特征。

优先队列的其他用法在此不作解释,此处只解释其作为堆的用法。

优先队列含有三个参数:Type, Container, Functional

priority_queue <Type, Container, Functional>

其中Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。

Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list。STL里面默认用的是 vector。

比较方式默认用 operator , 优先队列默认为大根堆;
如果要用到小顶堆,则一般要把模板的三个参数都带进去。
STL里面定义了 greater<类型>,如果要声明小根堆,则需要带上该参数。

此外,如果要自定义类型,就需要自己重载 operator

2. 如何使用

  1. 导入头文件
#include < queue > 
  1. 创建大根堆
// priority_queue <类型> 变量名;如:
priority_queue <int> heap;

3. 创建小根堆

// priority_queue <类型,vecotr <类型>,greater <类型>> 变量名,如:
priority_queue <int,vecotr <int>,greater <int>> heap
  1. 返回堆的长度
heap.size();
  1. 判断堆是否为空
heap.empty();
  1. 往堆里插入一个元素
heap.push();
  1. 返回堆顶元素
heap.top();
  1. 弹出堆顶元素
heap.pop();

本文标签: 数据结构队列priorityqueue