C++ queue和priority_queue

queue 和 priority_queue 都是容器适配器,要使用它们,必须包含头文件 。

queue

queue 就是“队列”。队列是先进先出的,和排队类似。队头的访问和删除操作只能在队头进行,添加操作只能在队尾进行。不能访问队列中间的元素。

queue 可以用 list 和 deque 实现,默认情况下用 deque 实现。

queue 的定义如下:

template < class T, class Cont = deque<T> >
class queue{...
};

queue 同样也有和 stack 类似的 push、pop、top 函数。区别在于,queue 的 push 发生在队尾,pop 和 top 发生在队头。

priority_queue

priority_queue 是“优先队列”。它和普通队列的区别在于,优先队列的队头元素总是最大的——即执行 pop 操作时,删除的总是最大的元素;执行 top 操作时,返回的是最大元素的引用。

priority_queue 可以用 vector 和 deque 实现,默认情况下用 vector 实现。

priority_queue 默认的元素比较器是 less 。也就是说,在默认情况下,要放入 priority_queue 的元素必须是能用“<”运算符进行比较的,而且 priority _queue 保证以下条件总是成立:对于队头的元素 x 和任意非队头的元素 y,表达式“x<y”必为 false。

priority_queue 定义如下:

template < class T, class Container = vector <T>, class Compare = less<T> >
class priority_queue{...
};

priority_queue 的第三个类型参数可以用来指定排序规则。

和 set/multiset 不同,priority_queue 是使用“堆排序”技术实现的,其内部并非完全有序,但却能确保最大元素总在队头。因此,priority_queue 特别适用于“不停地在一堆元素中取走最大的元素”这种情况。priority_queue 插入和删除元素的复杂度都是 O(log(n))。虽然用 set/multiset 也能完成此项工作,但是 priority_queue 比它们略快一些。

priority_queue 队头的元素只能被查看或者修改,不能被删除。

priority_queue的用法示例如下。

#include <queue>
#include <iostream>
using namespace std;
int main()
{priority_queue<double> pq1;pq1.push(3.2); pq1.push(9.8); pq1.push(9.8); pq1.push(5.4);while(!pq1.empty()) {cout << pq1.top() << " ";pq1.pop();} //上面输出 9.8 9.8 5.4 3.2cout << endl;priority_queue<double,vector<double>,greater<double> > pq2;pq2.push(3.2); pq2.push(9.8); pq2.push(9.8); pq2.push(5.4);while(!pq2.empty()) {cout << pq2.top() << " ";pq2.pop();}//上面输出 3.2 5.4 9.8 9.8return 0;
}

程序的输出结果是:

9.8 9.8 5.4 3.2
3.2 5.4 9.8 9.8

pq2 的排序规则和 pq1 相反,因此元素出队的顺序也相反。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

less linux命令,less 命令用法详解

less 在 Linux 中用来查看文件&#xff0c;它可以以分页的方式显示文件内容。目前和tail 是用来查看文件的常用命令命令格式less [参数] 文件1、使用示例less a.txt用来查看文件按f 或 space 向下翻一页按b向前翻一页其实很好记f即forward 向前b即backward 向后关键最强大的一点…

STL算法分类

STL 中&#xff0c;算法就是函数模板。STL 中的算法大多数是用来对容器进行操作的&#xff0c;如排序、 查找等。大部分算法都是在头文件 中定义的&#xff0c;还有些算法用于数值处理&#xff0c;定义在头文件 中。 STL 中的算法的分类方法。 1 . 不变序列算法。 2 . 变值算法…

linux系统时间代表,Linux上有两种时间,一种是硬件时间,一种是系统时间

date 系统时间clock/hwclock 硬件时钟cal 日历date打印或设置系统日期或时间&#xff0c;以给定格式显示或设置系统时间%a显示周%A 完整显示周%b显示月份%B 完整显示月%c e.g.,Thu Mar 3 23:05:25 2005%C 显示世纪%d显示几日%D …

linux下软件包清理,Linux运维知识:如何清理Linux系统中的孤立、无用的软件包

本文主要向大家介绍了Linux运维知识的如何清理Linux系统中的孤立、无用的软件包&#xff0c;通过具体的内容向大家展现&#xff0c;希望对的大家学习Linux运维知识有所帮助。在Linux下安装软件&#xff0c;通常会自动安装一些依赖包或库。在你卸载某个软件后&#xff0c;这个软…

linux 多个定时器,timer: 一个Linux下的超级精简的多重定时器:可实现成千上万个定时任务,定时精度可达纳秒级别,且同一时间点可添加不同的任务!适用于云后台服务和嵌入式等各种环境。...

MT_Timer(MT译为Multiple或Multi)一、介绍一个Linux下的超级简洁的定时器&#xff1a;利用epoll机制和timerfd新特性实现的多重、多用、多个定时任务实现。只需要使用TIMER_CREATE()接口创建一个定时器实体&#xff0c;即可向其添加成千上万个定时任务&#xff0c;定时任务可达…

C++ bitset类

bitset 模板类由若干个位&#xff08;bit&#xff09;组成&#xff0c;它提供一些成员函数&#xff0c;使程序员不必通过位运算就能很方便地访问、修改其中的任意一位。bitset 模板类在头文件 中定义如下&#xff1a; template <size_t N> class bitset {... };size_t 可…

red flag linux指定域名,Red Flag Server 4.1 系统管理手册(适用桌面linux4.1) 6

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼第3章 文件系统管理 (三)--------------------------------------------------------------------------------3.6 LVM逻辑卷管理LVM 是 Logical Volume Manager 的简写&#xff0c;它为计算机提供了更高层次的磁盘存储解决方案&am…

什么是计算机文件

内存中存放的数据在计算机关机后就会消失。要长久保存数据&#xff0c;就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索&#xff0c;引入了“文件”的概念。 一篇文章、一段视频、一个可执行程序&#xff0c;都可以被保存为一个文件&#xff0c;并赋予一个文件名。…

linux下阻塞的系统调用,Linux下文件的阻塞与非阻塞对部分系统调用的影响

1.基本概念所谓的阻塞&#xff0c;即内核在对文件操作I/O系统调用时&#xff0c;如果条件不满足(可能需要产生I/O)&#xff0c;则内核会将该进程挂起。非阻塞则是发现条件不满足就会立即返回。此外需要注意的是非阻塞并不是轮询&#xff0c;不然就和阻塞没多大区别了&#xff0…

C++文件类

C 标准类库中有三个类可以用于文件操作&#xff0c;它们统称为文件流类。这三个类是&#xff1a; ifstream&#xff1a;用于从文件中读取数据。ofstream&#xff1a;用于向文件中写人数据。fstream&#xff1a;既可用于从文件中读取数据&#xff0c;又可用于 向文件中写人数据。…

window10内核Linux,windows 10中发布完整的Linux内核

5月8日消息&#xff1a; 近年来&#xff0c;微软对Linux开发者社区的支持令许多人感到惊讶&#xff0c;包括将诸如Bash shell之类的东西引入到Windows&#xff0c;或者在Windows 10中支持原生OpenSSH&#xff0c;甚至包括Windows应用商店上架了Ubuntu、SUSE Linux和Fedora。现在…

C++ open 打开文件

在对文件进行读写操作之前&#xff0c;先要打开文件。打开文件有以下两个目的&#xff1a; 1 . 通过指定文件名&#xff0c;建立起文件和文件流对象的关联&#xff0c;以后要对文件进行操作时&#xff0c;就可以通过与之关联的流对象来进行。 2 . 指明文件的使用方式。使用方…

c语言窗口炸弹代码,C语言实现数字炸弹小游戏

本文实例为大家分享了C语言实现数字炸弹小游戏的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下使用的是C语言# 内容#include#includeint main(){//变量char c_TheRequest 1;//开始界面的字符int in_Deltar 1,in_EnteredNumber,in_Sig;//游戏中输入数字及其判定所需…

C++ 文本文件的读取和写入

使用文件流对象打开文件后&#xff0c;文件就成为一个输入流或输出流。对于文本文件&#xff0c;可以使用 cin、cout 读写。 流的成员函数和流操纵算子同样适用于文件流&#xff0c;因为 ifstream 是 istream 的派生类&#xff0c;ofstream 是 ostream 的派生类&#xff0c;fs…

C++ 移动和获取文件读写指针

在读写文件时&#xff0c;有时希望直接跳到文件中的某处开始读写&#xff0c;这就需要先将文件的读写指针指向该处&#xff0c;然后再进行读写。 ifstream 类和 fstream 类有 seekg 成员函数&#xff0c;可以设置文件读指针的位置&#xff1b;ofstream 类和 fstream 类有 seekp…

程序设计基础——c语言篇,C语言程序设计基础篇.ppt

C语言程序设计基础篇C 语言程序设计—基础篇 第 2 章 数据类型和输入输出 2.1 数据类型 著名计算机科学家沃思提出&#xff1a; 程序&#xff1d;数据结构&#xff0b;算法 例如&#xff1a;学生各科成绩及总分排队问题。 成绩存放 –– 数据结构 排队方法 –– 算法 在此, 存放…

文件的文本打开方式和二进制打开方式的区别

在 UNIX/Linux 平台中&#xff0c;用文本方式或二进制方式打开文件没有任何区别。 在 UNIX/Linux 平台中&#xff0c;文本文件以\n&#xff08;ASCII 码为 0x0a&#xff09;作为换行符号&#xff1b;而在 Windows 平台中&#xff0c;文本文件以连在一起的\r\n&#xff08;\r的…

c语言scanf函数隐藏的缓冲区,零基础学C语言 笔记四 Scanf函数清除缓冲区

Scanf函数清除缓冲区之前涉及到scanf会先到缓冲区看看是否存在数据&#xff0c;若存在数据&#xff0c;就直接拿缓冲区的数据过来使用&#xff0c;这就涉及到了一个问题&#xff0c;那如果缓冲区的数据不是我想要的呢&#xff1f;方法一&#xff1a;我们用scanf吸收掉我们的代码…

c语言中exchange函数,exchange

exchange描述 (Description)它原子地替换原子对象的值并获得先前保存的值。声明 (Declaration)以下是std :: atomic :: exchange的声明。T exchange( T desired, std::memory_order order std::memory_order_seq_cst );C11T exchange( T desired, std::memory_order order st…

C++ 流类和流对象

程序中常用的 cin 和 cout&#xff0c;分别用于从键盘输入数据和向屏幕输出数据&#xff08;简称为标准 I/O&#xff09;。除此之外&#xff0c;程序还可以从文件中读入数据&#xff0c;以及向文件中写入数据&#xff08;简称为文件 I/O)。 数据输入和输出的过程也是数据传输的…