[C++STL] Priority Queue 介绍及源码分析

本文介绍了C++ STL中的Priority Queue,包括声明与初始化、基础函数、自定义比较函数的使用,以及底层实现。通过代码案例展示了如何创建、操作优先队列,并分析了其在LeetCode题目中的应用。文章还总结了Priority Queue的优点和缺点,如便于处理最值问题但遍历不够直观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文将介绍C++ STL 库queue头文件中的优先队列priority queue,主要涉及基础函数,其底层实现,以及有关应用。


主要参考文档 https://en.cppreference.com/w/cpp/container/priority_queue


声明与初始化

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;
  • 声明输入 T : 指定该优先队列内存放的元素之类型
  • 声明输入 Container: 指定该优先队列的底层容器
    • 注:该容器必须为支持front(), push_back(), pop_back()的有序容器,原因见后文源码,默认为std::vector
  • 声明输入 Compare:指定优先度的判断条件
    • 函数模板 bool Compare(T arg_1, T arg_2);
    • 注:当该函数返回True时,arg1将晚于arg2出队,即arg2优先度更高。换种说法,在队首的元素与其他所有元素进行compare的结果都是False
    • 默认为std::less,即return arg1 < arg2;, 如此将为大顶堆,同理std::greater为小顶堆。

基础函数

此处将介绍几个较为常用的,完整列表详见 https://en.cppreference.com/w/cpp/container/priority_queue

构造函数

  1. 默认构造函数
priority_queue() : priority_queue(Compare(), Container()) {
   
    }
  1. 拷贝优先队列构造函数
priority_queue( const priority_queue& other );
  1. 拷贝其他容器构造函数
template< class InputIt >
priority_queue( InputIt first, InputIt last,
                const Compare& compare, const Container& cont );

容器属性函数

几乎所有C++容器都带有的常见函数,不多赘述

bool        empty() const;      // 检查是否为空
size_type   size()  const;      // 返回容器内元素数量

队列专属函数

  1. 获取队首元素(对于优先队列即为优先度最高元素)
   const_reference top() const;
  1. 移除队首元素
   void pop();
  1. 元素入列
    void push( const value_type& value );

具体成员函数列表…

https://en.cppreference.com/w/cpp/container/priority_queue


代码案例

基础初始化,push(),pop()操作

#include<queue>
#include<iostream>

// Print all element in the queue in order
void printQueue(std::priority_queue<int>& q){
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值