C++优先队列探秘:原理揭示与最小堆自定义实现指南

优先队列

优先队列有两个操作:
1、插入队列;
2、弹出最小元素;

常用(不用理解底层原理也能直接用)

c++中,STL里可以直接调用priority_queue,内部默认是使用大根堆实现的,也就是优先队列默认情况下是最大值优先

基本使用方法如下:

默认

#inlcude<isotream>
#inlcude<queue>//包含优先队列的头文件

int main(){
    std::priority_queue<int> pq;
   
	//插入元素
    pq.push(10);
    pq.push(30);
    pq.push(20);
    
    //移除和访问顶部元素
    while(!pq.empty()){
        std::cout<<pq.top()<<" ";
        pq.pop();
    }

    return 0;
}

如果是一般数组,会输出{10,30,20};
但这是默认的优先数组,升序,每次先弹出最大值
输出{30,20,10};

创建最小值优先的优先队列

声明时指定比较函数

#include<isotream>
#include<queue>
#include<vector>
#include<functional>//包含std::greater

int main(){
    std::priority_queue<int,std::vector<int>,std::greater&l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值