首页 > 其他分享 >cpp优先队列(priority_queue)

cpp优先队列(priority_queue)

时间:2022-12-18 17:23:07浏览次数:36  
标签:priority 优先 优先级 队列 元素 queue cpp

优先队列的概念

  • 在优先队列中,队列中的每个元素都与某个优先级相关联,但是优先级在队列数据结构中不存在。

  • 优先队列中具有最高优先级的元素将被首先删除,而队列遵循FIFO(先进先出)策略,这意味着先插入的元素将被首先删除。

  • 如果存在多个具有相同优先级的元素,则将考虑该元素在队列中的顺序。

 

优先队列的语法
priority_queue<Type, Container, Functional>

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

1.在STL中,默认情况下(不加后面两个参数)是以vector为容器,以 operator< 为比较方式,所以在只使用第一个参数时,优先队列默认是一个最大堆,每次输出的堆顶元素是此时堆中的最大元素。

2.用到最小堆,则一般要把模板的三个参数都带进去。STL里面定义了一个仿函数 greater<>,对于基本类型可以用这个仿函数声明最小堆(升序)

 

大顶堆与小顶堆

1. 大顶堆(降序)
//构造一个空的优先队列(此优先队列默认为大顶堆)
priority_queue<int> big_heap;

//另一种构建大顶堆的方法
priority_queue<int,vector<int>,less<int> > big_heap2;


2. 小顶堆(升序)
//构造一个空的优先队列,此优先队列是一个小顶堆
priority_queue<int,vector<int>,greater<int> > small_heap;

 

 

注意事项
需要注意的是,如果使用less和greater,需要头文件:#include <functional>

 

标签:priority,优先,优先级,队列,元素,queue,cpp
From: https://www.cnblogs.com/spacerunnerZ/p/16990601.html

相关文章