优先队列-小结与刷题指北

本文总结了优先队列的声明、特性、操作,并提供了调整排序方式的方法。通过自定义结构体和重载 '<' 操作符可以控制队列顺序。文章还推荐了几道关于优先队列的练习题,包括洛谷P3887、P1090和两道Codeforces题目,适合不同程度的程序员进行练习。
摘要由CSDN通过智能技术生成

仅以本文记录笔者在学习优先队列之后的一些用法归纳,文末有一些推荐的题单

优先队列

声明:

在有以下头文件的情况下,可以使用优先队列

#include<queue>
using namespace std;

笔者则是常用万用库:

#include<bits/stdc++.h>
using namespace std;

最常规的声明方式是以下这种:
priority_queue<结构类型> 队列名;

priority_queue<int> q;
priority_queue<double> s;

其中的结构类型可以是自定义的结构体

priority_queue<node> q;

特性:

相信来阅读此篇文章的读者都对优先队列的特性有所耳闻,便是自动排序(默认从大到小排序) 通过以下写法可以控制队列是由小到大货由大到小排序

priority_queue <int,vector<int>,less<int> > p;//从大到小
priority_queue <int,vector<int>,greater<int> > q;//从小到大

而对于结构体,我们通常通过重载’<'完成对排序顺序的控制,实例如下:

struct node
{
    int x,y;
    bool operator < (const node & a) const
    {
        return x<a.x;
    }
};

操作:

优先队列的一些基础操作和队列几乎一致:

q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
q.back();//返回q的末尾元素

尾声:

优先队列操作简便,但功能强大,在优先队列的帮助下我们能解决许多问题。

刷题指北

关于熟悉优先队列的使用,个人的一些题目推荐(为了方便大家提交,下面放的都是luogu链接):
洛谷P3887 世界杯:2014广东省选 普及- 优先队列的入门级题目
洛谷P1090 合并果子 :2004 NOIp提高组 普及/提高-
CF1114B Yet Another Array Partitioning Task 1500 普及-
CF1140C Playlist:1600 提高+/省选-(此题略有挑战)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值