特殊队列(1)——优先队列

哈,我豁出去了,没想到会这没早地写优先队列。

说优先队列,其实算不上是队列,更像是一个数组,每一次,你给他sort()一下,完全违背了FIFO(先进先出)的规则。而且这个sort,还是默认大到小的。

那我就来说说吧。

1.头文件,跟基本队列一样

#include<queue>

或者说,你可以一把捞所有的头文件,真是方便

#include<bits/stdc++.h>

我的话,更倾向于后者,懒人懒办法。

2.定义

给个格式,找了我半天

priority_queue<Type, Container, Functional>;

看不懂也没事,我也有些看不懂。

正常人一点的,是这样的

priority_queue<类型,两个奇葩(说不清)> 名字;

再说明白一点,就是——

升序:

priority_queue<类型,vector<类型>,greater<类型> >名字;

降序:

priority_queue<类型,vector<类型>,less<类型> >名字;

注意两个"> >"之间的空格,别打成">>"了。


额……我无语


我的神仙笔法

给个样例——

升序队列:

priority_queue <int,vector<int>,greater<int> > q;

降序队列:

priority_queue <int,vector<int>, less<int> >q;

3.然后是操作

跟普通的FIFO特像,如果读过我的前一篇文章,你会很明白为什么是“特像”,却不是“一样”。

先给张表,这是优先队列的

top() 访问队头元素

empty() 队列是否为空

size() 返回队列内元素个数

push() 插入元素到队尾 (并排序)

pop() 弹出队头元素

再来看看我之前的那次,这是普通队列的——

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

size()                返回队列中元素的个数

pop()                删除队列首元素但不返回其值

front()              返回队首元素的值,但不删除该元素

back()          返回队列尾元素的值,但不删除该元素

push()                在队尾压入新元素

区别就在这儿

一个是

top()          返回队首元素的值

一个是

front()              返回队首元素的值

back()              返回队列尾元素的值

优先队列,没有求队尾元素值的函数。

样例嘛

q.top() 访问队头元素

q.empty() 队列是否为空

q.size() 返回队列内元素个数

q.push() 插入元素到队尾 (并排序)

q.pop() 弹出队头元素

加个q就行了,打字的同志说,简单的很!

4.好勒,总结一下

优先队列,不是FIFO,而是FI,“best”O,简单的很,会了queue,priority也不怕。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 循环队列 #include #include #defineFALSE0 #defineTRUE1 typedef...
    百合_b06b阅读 609评论 0 0
  • 前面我们学习了栈的实现,队列和栈非常类似,但是使用了不同的原则,而非后进先出。 队列是遵循FIFO(First I...
    小刀爱编程阅读 1,012评论 0 0
  • 1.什么是队列?队列是数据结构中比较重要的一种类型(是一种数据结构),它支持 FIFO,尾部添加、头部删除(先进队...
    晏子小七阅读 89,036评论 3 18
  • 容器的概念所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定...
    饭饭H阅读 391评论 0 0
  • 360真题 http://discuss.acmcoder.com/topic/58cd31e475bf559a0...
    大海一滴写字的地方阅读 1,486评论 0 0