一.queue模版类的定义在<queue>头文件中。

queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是可选的,默认为dqueue类型。

定义queue对象的示例代码如下:

queue<int>q1;

queue<double>q2;

queue的基本操作有:

1.入队:如q.push(x):将x元素接到队列的末端;

2.出队:如q.pop() 弹出队列的第一个元素,并不会返回元素的值;

3,访问队首元素:如q.front()

4,访问队尾元素,如q.back();

5,访问队中的元素个数,如q.size();

二.优先队列

在<queue>头文件中,还定义了一个非常有用的模版类priority_queue(优先队列),优先队列与队列的差别在于优先队列不是按照入队的顺序出队,而是按照队列中元素的优先权顺序出队(默认为大者优先,也可以通过指定算子来指定自己的优先顺序)。

priority_queue模版类有三个模版参数,元素类型,容器类型,比较算子。其中后两个都可以省略,默认容器为vector,默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)。

定义priority_queue对象的示例代码如下:

priority_queue<int >q1;

priority_queue<pair<int,int> >q2;

priority_queue<int,vector<int>,greater<int> >q3;//定义小的先出队

priority_queue的基本操作均与queue相同

初学者在使用priority_queue时,最困难的可能就是如何定义比较算子了。如果是基本数据类型,或已定义了比较运算符的类,可以直接用STL的less算子和greater算子——默认为使用less算子,即小的往前排,大的先出队。如果要定义自己的比较算子,方法有多种,这里介绍其中的一种:重载比较运算符。优先队列试图将两个元素x和y代入比较运算符(对less算子,调用x<y,对greater算子,调用x>y),若结果为真,则x排在y前面,y将先于x出队,反之,则将y排在x前面,x将先出队。

看下面这个简单的示例:
[cpp] view plaincopyprint?

#include<iostream>
#include<queue>
#include<stdlib.h>
using namespace std;
class T
{
public:
int x,y,z;
T(int a,int b,int c):x(a),y(b),z(c)
{
}
};
bool operator<(const T&t1,const T&t2)
{
return t1.z<t2.z;
}
int main(void)
{
priority_queue<T>q;
q.push(T(4,4,3));
q.push(T(2,2,5));
q.push(T(1,5,4));
q.push(T(3,3,6));
while(!q.empty())
{
T t=q.top();
q.pop();
cout<<t.x<<" "<<t.y<<" "<<t.z<<endl;
}
system("Pause");
return 1;
}

输出结果为

注意这里是按照z的顺序从大到小出队的。

如果我们把上述例子中的比较运算符重载改为:

bool operator<(const T &t1,const T &t2)

{

return t1.z>t2.z;

}

那么得到的输出结果将会按照z的顺序从小到大出队。

c++queue容器介绍的更多相关文章

  1. 浅谈C++ STL queue 容器

    浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们 ...

  2. STL学习系列五:Queue容器

    Queue简介 queue是队列容器,是一种“先进先出”的容器. queue是简单地装饰deque容器而成为另外的一种容器. #include <queue> 1.queue对象的默认构造 ...

  3. STL之Queue容器

    1.Queue容器 1)queue是队列容器,是一种“先进先出”的容器. 2)queue是简单地装饰deque容器而成为另外的一种容器. 3)头文件.#include <queue> 2. ...

  4. STL Queue 容器

    STL Queue 容器 Queue简介         queue是队列容器,是一种“先进先出”的容器.         queue是简单地装饰deque容器而成为另外的一种容器.        # ...

  5. BootStrap容器介绍

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  6. C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器

    01 上次课程回顾 昨天讲了三个容器 string  string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...

  7. Docker 容器介绍

    Docker 容器介绍 Docker 是一个基于 Go 语言的开源应用容器引擎,它既能实现虚拟化,又可用于将应用服务打包成轻量.可移植的容器,从而可以发布到任何 Linux 平台.除了优秀了沙箱机制外 ...

  8. JUC源码分析-集合篇:并发类容器介绍

    JUC源码分析-集合篇:并发类容器介绍 同步类容器是 线程安全 的,如 Vector.HashTable 等容器的同步功能都是由 Collections.synchronizedMap 等工厂方法去创 ...

  9. C++queue容器学习(详解)

    一.queue模版类的定义在<queue>头文件中. queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是 ...

随机推荐

  1. js 扩展replaceAll

    //扩展replaceAll; String.prototype.replaceAll = function(s1,s2) { return this.replace(new RegExp(s1,&q ...

  2. LeetCode Recover Binary Search Tree——二查搜索树中两个节点错误

    Two elements of a binary search tree (BST) are swapped by mistake.Recover the tree without changing ...

  3. 设置windows时间开机同步方法

    本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. 适用场景: 主板电池 ...

  4. 调用android系统相机拍照并保存

    [java] view plaincopyprint? <span style="font-size:18px;">package com.demo; import j ...

  5. 黑帽SEO手法

    黑帽SEO手法 0x00:概念 SEO全称搜索引擎优化,通过站内优化和站内优化方式来提升搜索引擎排名,有白帽SEO和黑帽SEO. 因为正规的SEO优化需要很长时间,黑帽SEO手法让站内快速提升排名的有 ...

  6. JVM学习02-GC算法与种类

    1. GC 简单介绍 GC(Garbage Collection) 是垃圾收集的简写,GC机制是java中一个比較重要的概念.java的内存管理提供了内存的分配和释放.内存处理是程序编写人员非常eas ...

  7. Google论文BigTable拜读

    这周少打点dota2,争取把这篇论文读懂并呈现出来,和大家一起分享. 先把论文搞懂,然后再看下和论文搭界的知识,比如hbase,Chubby和Paxos算法. Bigtable: A Distribu ...

  8. [Linux] 概念

    操作系统包括: 内核:管理硬件资源 库:没有执行入口的程序,用于提升软件开发效率 应用程序:有执行入口的程序 常见库文件: windows系统:dll(dynamic link library)动态链 ...

  9. windows 10 python 2.7和python3.6共存解决方法和pip安装

    一.首先去python官网将两个版本下载并安装: 然后进入windows的环境变量,检查下面4个变量: 1.C:\Python272.C:\Python27\Scripts3.D:\software\ ...

  10. Navicat Premium创建事件计划调用MySql存储过程

    1.检查事件计划,操作:工具——命令行界面——执行命令 show variables like '%event_scheduler%'; (分号不能丢)—— event_scheduler  ON 表 ...