STL关于queue(队列)与priority_queue(优先队列)的一些笔记
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(优先队列)的一些笔记相关推荐
- stl之queue队列容器
queue队列也是一个线性存储表,元素的数据插入在表的一端进行,在另一端删除,从而构成先进先出表.插入一端为队尾,删除的一端为队首. 由于仅需取队首和队尾元素的操作,因此queue队列容器并不提供任何 ...
- STL之queque队列
queue队列容器 一.原理 queue 队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表.插入一端称为队尾 ...
- STL—queue(队列) 详解
首先,在STL中 queue 和 stack 其实并不叫容器(container),而是叫适配器(adapter),他们是对容器的再封装. 队列queue: 队列,简称对,是一种操作受限的线性表.限制 ...
- 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )
文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...
- [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程
不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...
- python 优先队列_Python Queue队列实现线程通信
queue 模块下提供了几个阻塞队列,这些队列主要用于实现线程通信.在 queue 模块下主要提供了三个类,分别代表三种队列,它们的主要区别就在于进队列.出队列的不同.关于这三个队列类的简单介绍如下: ...
- c++ std::priority_queue优先队列
template <class T, class Container = vector<T>,class Compare = less<typename Container:: ...
- C++_STL——queue(and priority_queue)
C++_STL--queue(and priority_queue) queue: template <class T, class Container = deque<T> > ...
- C++ 优先级队列(priority_queue)
C++ 优先级队列(priority_queue) 优先级队列顾名思义是根据元素的优先级被读取,接口和queues非常相近.程序员可以通过template参数指定一个排序准则.缺省的排序准则是利用op ...
最新文章
- Sync 攻击原理及防范技术
- lvs的调度算法有几种_LVS:三种负载均衡方式比较
- 黑猫315十大行业乱象发布:背后真假套路难辨
- [SpringMVC]定义多个前缀映射的问题
- List<Map<String, Object>>——多层嵌套的数据结构
- $git学习总结系列(4)——gitignore文件
- Java技术:Mybatis-plus常用API全套教程,值得收藏!
- .net core 源码解析-mvc route的注册,激活,调用流程(三)
- ArcSDE工作机制
- 三星宣布华大九天成为其晶圆代工生态系统SAFE EDA合作伙伴
- Object_C与JavaScript交互使用总结
- c语言系统函数——目录操作
- 农村小伙从月薪2000多到年薪几十万,我的这条路大多数搬砖人都能走 ǃ
- 虚拟盒子下装linux系统,eUnoBox(虚拟盒子) v3.14免费版
- 移动智能终端可信环境分析
- 架构:安全架构——信息过滤与反垃圾、风险控制。
- Matlab中安装NURBS工具箱及使用
- 金海佳学C++primer 练习9.44
- [BZOJ]4491: 我也不知道题目名字是什么 线段树(差分)
- Android拦截电话
热门文章
- 使用python获取time.time()当前时间的YMD格式和获取今天是几号
- office2020与2016版的不同_2020年了,我们该如何选择Office365
- 用andengine做一款俄罗斯方块游戏
- i9-13900K华硕 Z-790A wifi D5吹雪 编译Qt 源码实测
- 【三星官方教程】如何为Gear VR 开发应用(一):开发环境搭建
- buu练题记录12-[网鼎杯 2020 青龙组]jocker
- 世界首套!我国时速600公里高速磁浮交通系统下线
- 油藏弹性存储量计算公式_油藏采收率测算方法_采收率
- 从TI官网找例程(dsp)
- 天气预报系统中的可视化