优先队列

FIFO队列和优先队列

使用他们必须包含 queue 头文件。

   定义FIFO队列

   queue<类型名> 变量名

   queue<int> que //定义que为一个int类型的FIFO队列

   queue<char> a //定义 a 为一个char 类型的FIFO队列

   queue<data> c //定义c为一个data类型的FIFO队列

   //其中data为自定义的数据类型,可以为结构体

   

   定义简单的优先队列

   priority_queue <int> heap;   //定义heap为一个int类型的优先队列

   priority_queue <double> k;  //定义k为一个double类型的优先队列

   这两种定义方式都是大根堆,想要使其变成小根堆,可以将每个数据都乘以-1

 

定义结构体的优先队列

   struct data{

    int x;

    bool operator < (const data & a)const  //const一定要写

                 {

                    return a.x<x; //等于小根堆

         }

       };

   priority_queue <data>q; //q 优先队列的优先规则由data重载小于号决定

 

FIFO队列和优先队列的操作

 

q.empty()

如果队列为空,则返回true,否则返回false

q.size()

返回队列中元素的个数

q.pop()

删除队首元素,但不返回其值

q.front()

返回队首元素的值,但不删除该元素(仅适用于FIFO队列)

q.back()

返回队尾元素的值,但不删除该元素(仅适用于FIFO队列)

q.top()

返回具有最高优先级的元素的值,但不删除该元素(仅适用于优先队列)

q.push()

queue,在队尾压入一个新元素

对于priority_queue,在基于优先级的适当位置插入新元素

利用C++自带优先队列的合并果子代码:

   

#include<cstdio>

#include<iostream>

#include<queue>

using namespace std;

priority_queue <int> que;

int main() {

    int n; scanf("%d",&n);

    for (int i=0,x;i<n;++i) {

    scanf("%d",&x); que.push(-x);

    }

    int ans=0;

    for (int i=1,tmp;i<n;++i) {

           tmp=que.top(); 

             ans-=que.top();

           que.pop();        

             tmp+=que.top();

           ans-=que.top();

             que.pop();

           que.push(tmp); 

       }

    cout<<ans<<endl;

             return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值