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

来源:互联网 发布:淘宝店铺关闭怎么激活 编辑:程序博客网 时间:2024/06/14 23:24

优先队列其头文件

#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; } 
原创粉丝点击