谁都能看懂的C++ STL之优先队列(priority_queue)

本文介绍了优先队列的基本概念及其实现方式,包括如何使用C++标准模板库中的`priority_queue`,并展示了如何通过自定义比较运算符来设置元素的优先级。此外,还提供了一个完整的示例程序,演示了优先队列的各种基本操作。

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

优先队列其头文件

#include<queue>

其中队列为先进先出的原则,而优先队列为按照最高优先级出队。
声明一个优先队列时:priority_queueq;
基本操作为:
q.push():向队列里添加一个元素;
q.top():返回优先队列中的队顶元素;
q.empty():判断优先队列是否为空;
q.size():返回优先队列中拥有的元素个数;
q.pop():删除队顶元素;
优先队列中优先元素自定义:

const int N = 1e5+10; 
struct node{
    int num;
    int date;
    friend bool operator <(node a,node b)
    {
        return a.date<b.date;//大的优先级高 
    }
}e[N]; 

若有运算符重载不懂的,先去看懂运算符重载;


下面是一些优先队列的基本操作的实现:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<stdlib.h>
#include<queue>
using namespace std;
const int N = 1e5+10; 
struct node{
    int num;
    int date;
    friend bool operator <(node a,node b)
    {
        return a.date<b.date;//大的优先级高 
    }
}e[N]; 
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&e[i].date);
        e[i].num;
    }
    priority_queue<node>q;//创建一个空的优先队列 
    for(int i=1;i<=n;i++)
    {
        q.push(e[i]);//入队 
    }
    int l=q.size();//返回优先队列拥有的元素个数 
    printf("该优先队列中的元素个数为:%d\n",l);
    while(!q.empty())//当队列非空时执行 
    {
        node s=q.top();//返回队列的队顶元素 
        q.pop();//删除队顶元素 
        printf("%d %d\n",s.num,s.date);
    }
    return 0; 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值