queue

queue就是队列
在STL中主要实现了一个先进先出的容器
使用queue应该先添加头文件#include<queue>

queue<typename>name;

queue常用函数

  • push(),将x入队,时间复杂度为O(1) front(),back(),分别可以获得队首元素和队尾元素,时间复杂度为O(1)
  • front(),back(),分别可以获得队首元素和队尾元素,时间复杂度为O(1)
  • pop(),pop()令队首元素出队,时间复杂度为O(1)
  • empty(),empty()检查queue是否为空,返回true则空,返回false则非空,时间复杂度为O(1)
  • size(),size()返回queue内元素的个数,时间复杂度为O(1)

当需要实现广度优先搜索时可以不用自己动手实现一个队列而是用queue作为代替以实现程序的准确性,另外使用front()和pop()函数前必须先用empty()判断队列是否为空,否则可能因为队空而发生错误

priority_queue

priority_queue是优先队列
头文件还是#include<queue>

定义:priority_queue<Type, Container, Functional>

Type 就是数据类型。(int ,double等.)
Container 就是容器类型(Container必须是用数组实现的容器,默认vector,但不能用 list。)
Functional 就是比较的方式(可以自定义,默认从小到大排序)

关于自定义排序方式下面会有说明

//一般声明有
priority_queue <int> p1;
priority_queue<int,vector<int> , less<int> >q;//与上面等价,降序排序
priority_queue<int,vector<int> , greater<int> >q;//升序排序

pari的比较,先比较第一个元素,第一个相等比较第二个

priority_queue<pair<int,int> >p;

自定义数据类型的比较

#include<bits/stdc++.h>
using namespace std;
struct Node
{int x;Node() {}Node(int x):x(x) {} //赋值bool operator<(const Node& a) const//从大到小{return x<a.x;}
};
int main()
{priority_queue<Node> p;for(int i=1; i<=5; i++)//输入数据p.push(Node(i));while(!p.empty()){cout<<p.top().x<<' ';p.pop();}return 0;
}

————————————————————————————————————————————————————————————————————————————————————————
下面是自定义类型queue的进一步应用

虽然有限队列有默认的排列顺序,但在很多情况下默认排序并不满足我们的需求,这就需要我们们自定义排列顺序

可以在结构体内部重载运算符,改变符号的功能

#include<bits/stdc++.h>
using namespace std;
struct Node
{int x;Node() {}Node(int x):x(x) {} //赋值bool operator<(const Node& a) const //从大到小{return x<a.x;}bool operator>(const Node& a) const//从小到大{return x>a.x;}
};
int main()
{priority_queue<Node> p1;//默认从大到小 等价于priority_queue<Node,vector<Node>,less<Node> > p1;for(int i=1; i<=5; i++)p1.push(Node(i));cout<<"p1 = ";while(!p1.empty()){cout<<p1.top().x<<' ';p1.pop();}cout<<endl;priority_queue<Node,vector<Node>,greater<Node> > p2;//从小到大for(int i=5; i>=1; i--)p2.push(Node(i));cout<<"p2 = ";while(!p2.empty()){cout<<p2.top().x<<' ';p2.pop();}return 0;
}

可以在结构体内部重载运算符,改变符号号的功能

#include<bits/stdc++.h>
using namespace std;
struct Node
{int x;Node() {}Node(int x):x(x) {} //赋值
};
struct cmp
{/*bool operator() (const Node& a,const Node& b) //从大到小{return a.x<b.x;}*/bool operator() (const Node& a,const Node& b) //从小到大{return a.x>b.x;}};int main()
{priority_queue<Node,vector<Node>,cmp > p;for(int i=1; i<=5; i++)p.push(Node(i));cout<<"p = ";while(!p.empty()){cout<<p.top().x<<' ';p.pop();}cout<<endl;return 0;
}

STL关于queue(队列)与priority_queue(优先队列)的一些笔记相关推荐

  1. stl之queue队列容器

    queue队列也是一个线性存储表,元素的数据插入在表的一端进行,在另一端删除,从而构成先进先出表.插入一端为队尾,删除的一端为队首. 由于仅需取队首和队尾元素的操作,因此queue队列容器并不提供任何 ...

  2. STL之queque队列

    queue队列容器 一.原理 queue 队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表.插入一端称为队尾 ...

  3. STL—queue(队列) 详解

    首先,在STL中 queue 和 stack 其实并不叫容器(container),而是叫适配器(adapter),他们是对容器的再封装. 队列queue: 队列,简称对,是一种操作受限的线性表.限制 ...

  4. 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )

    文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...

  5. [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程

    不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...

  6. python 优先队列_Python Queue队列实现线程通信

    queue 模块下提供了几个阻塞队列,这些队列主要用于实现线程通信.在 queue 模块下主要提供了三个类,分别代表三种队列,它们的主要区别就在于进队列.出队列的不同.关于这三个队列类的简单介绍如下: ...

  7. c++ std::priority_queue优先队列

    template <class T, class Container = vector<T>,class Compare = less<typename Container:: ...

  8. C++_STL——queue(and priority_queue)

    C++_STL--queue(and priority_queue) queue: template <class T, class Container = deque<T> > ...

  9. C++ 优先级队列(priority_queue)

    C++ 优先级队列(priority_queue) 优先级队列顾名思义是根据元素的优先级被读取,接口和queues非常相近.程序员可以通过template参数指定一个排序准则.缺省的排序准则是利用op ...

最新文章

  1. Sync 攻击原理及防范技术
  2. lvs的调度算法有几种_LVS:三种负载均衡方式比较
  3. 黑猫315十大行业乱象发布:背后真假套路难辨
  4. [SpringMVC]定义多个前缀映射的问题
  5. List<Map<String, Object>>——多层嵌套的数据结构
  6. $git学习总结系列(4)——gitignore文件
  7. Java技术:Mybatis-plus常用API全套教程,值得收藏!
  8. .net core 源码解析-mvc route的注册,激活,调用流程(三)
  9. ArcSDE工作机制
  10. 三星宣布华大九天成为其晶圆代工生态系统SAFE EDA合作伙伴
  11. Object_C与JavaScript交互使用总结
  12. c语言系统函数——目录操作
  13. 农村小伙从月薪2000多到年薪几十万,我的这条路大多数搬砖人都能走 ǃ
  14. 虚拟盒子下装linux系统,eUnoBox(虚拟盒子) v3.14免费版
  15. 移动智能终端可信环境分析
  16. 架构:安全架构——信息过滤与反垃圾、风险控制。
  17. Matlab中安装NURBS工具箱及使用
  18. 金海佳学C++primer 练习9.44
  19. [BZOJ]4491: 我也不知道题目名字是什么 线段树(差分)
  20. Android拦截电话

热门文章

  1. 使用python获取time.time()当前时间的YMD格式和获取今天是几号
  2. office2020与2016版的不同_2020年了,我们该如何选择Office365
  3. 用andengine做一款俄罗斯方块游戏
  4. i9-13900K华硕 Z-790A wifi D5吹雪 编译Qt 源码实测
  5. 【三星官方教程】如何为Gear VR 开发应用(一):开发环境搭建
  6. buu练题记录12-[网鼎杯 2020 青龙组]jocker
  7. 世界首套!我国时速600公里高速磁浮交通系统下线
  8. 油藏弹性存储量计算公式_油藏采收率测算方法_采收率
  9. 从TI官网找例程(dsp)
  10. 天气预报系统中的可视化