C++标准模板库(STL)之Priority_Queue
1、Priority_Queue的常用用法
priority_queue:优先队列,底层是使用堆来实现的。优先队列中,队首元素一定是当前队列中优先级最高的哪一个。
a (优先级3),b(优先级4),c(优先级1),出队顺序是:b(4)-》a(3)-》c(1)
1.1、priority_queue的定义
使用优先队列,要加头文件#include<queue>和using namespace std;
priority_queue<typename> pq;
1.2、priority_queue容器元素访问
优先队列和队列queu不一样,没有front()和back()函数,只能通过top()函数访问队首元素(堆顶元素),优先级最高的元素。
#include<stdio.h>
#include<queue> using namespace std; int main()
{
priority_queue<int> q;
q.push();
q.push();
q.push();
printf("%d\n",q.top());//输出结果为4
return ;
}
1.3、priority_queue的常用函数
1.3.1、push()
push(x):将x入队,时间复杂度为O(logN),N为优先队列中元素个数。
1.3.2、top()
top():获得堆顶元素,时间复杂度为O(1)
1.3.3、pop()
pop():让堆顶元素出队,时间复杂度为O(logN)
1.3.4、empty()
empty():检测优先队列是否为空,返回bool值,true为空,false非空
1.3.5、size()
size():返回优先队列中的元素个数。
1.4、priority_queue内元素优先级的设置
1.4.1、基本数据类型的优先级设置
基本数据类型:int,double,char等。
priority_queue<int> pq;
priority_queue<int,vector<int>,less<int>> pq;
/*
vector<int>:承载底层数据结构堆Heap的容器
如果第一个参数是double,那么第二个也对应是double
less<int>:是对第一个参数的比较类,less<int>表示的数组大的优先级越大。
greater<int>:表示数字小的优先级越大 priority_queue<int,vector<int>,greater<int>> pq;
//优先队列总是把最小的元素放在队首。 priority_queueK<int,vector<int>,less<int>> pq;
//优先队列总是把最大的元素放在队首。
#include<stdio.h>
#include<queue> using namespace std; int main()
{
//用greater优先队列总是把最小的排在堆顶
priority_queue<int,vector<int>,greater<int>> q;
q.push();
q.push();
q.push();
printf("%d\n",q.top());//输出结果为1
//用less优先队列总是把最大的排在堆顶
priority_queue<int,vector<int>,less<int>> pq;
pq.push();
pq.push();
pq.push();
printf("%d\n",pq.top());//输出结果为5
return ;
}
1.4.2、结构体的优先级设置
#include<stdio.h>
#include<queue> using namespace std;
struct fruit
{
string name;
int price;
friend bool operator < (fruit f1,fruit f2)
{
return f1.price<f2.price;
}
}f1,f2,f3; int main()
{
priority_queue<fruit> q;
f1.name="apple";
f1.price=;
f2.name="perl";
f2.name=;
f3.name="banana";
f3.price=;
q.push(f1);
q.push(f2);
q.push(f3);
cout<<q.top.name<<" "<<q.top().prince<<endl;//banana 1
return ;
}
1.5、priority_queue的常见用途
可以解决贪心问题,也可以定义Dijkstra算法进行优化
使用top()函数,必须使用empty()判断优先队列是否为空。
2018-09-25 20:14:03
@author:Foreordination
C++标准模板库(STL)之Priority_Queue的更多相关文章
- 标准模板库(STL)学习探究之stack
标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string
- STL学习系列之一——标准模板库STL介绍
库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...
- 标准模板库--STL
标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- C++ 标准模板库(STL)
C++ 标准模板库(STL)C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- 实验8 标准模板库STL
一.实验目的与要求: 了解标准模板库STL中的容器.迭代器.函数对象和算法等基本概念. 掌握STL,并能应用STL解决实际问题. 二.实验过程: 完成实验8标准模板库STL中练习题,见:http:// ...
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍
C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...
- C++的标准模板库(STL)简介
STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的.在被引入C++之前该技术就已经存在了很长的一段时间.后来STL成为ANSI ...
随机推荐
- 菜鸟redis初学
该随笔为本人自学redis所遇到的错误,写这些初衷完全是为了避免以后犯相同的错误,如果对别人有帮助,那就相互促进. 在Java中使用redis,首先你的Jdk要能运行,如果没配置好,网上有很多jdk环 ...
- spring源码解析2--容器的基本实现
spring的主要特性是IOC,实现IOC的关键是bean,而更关键的是如何bean的管理容器,也就是BeanFactory,本文的目标是弄清楚BeanFactory具体是怎么样的存在. 先看下最简单 ...
- mysql 事物没提交导致事物一直运行解决方案
1.设置 innodb_kill_idle_transaction 参数, 可以永久避免 https://dbaplus.cn/news-11-974-1.html
- 用java实现操作两个数据库的数据
1.首先需要在jdbc的配置文件里面配置两个数据库的连接 数据库1的配置 driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://地址:3306/数 ...
- 通过Charles获取看书神器API
Charles Charles是一个可以做HTTP代理/ HTTP监视器/反向代理的软件,使开发人员能够查看其机器和Internet之间的所有HTTP和SSL / HTTPS流量.包括请求,响应和HT ...
- php,js 对字符串按位异或运算加密解密
异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...
- 终于有人把云计算、大数据和 AI 讲明白了
最近学习hadoop以及生态,顺便看到了这篇文章,总结的很到位,转载下. 我今天要讲这三个话题,一个是云计算,一个大数据,一个人工智能,我为什么要讲这三个东西呢?因为这三个东西现在非常非常的火,它们之 ...
- PreparedStatement传进null值报错
最近在测试jdbc数据导入大量数据的性能,发现PreparedStatement传进null值会报错. 解决方法: setObject(int parameterIndex, Object x, in ...
- 2018年-2019年第二学期第二周C#学习个人总结
在本学期的第二周,我们又开始了C#的学习.在星期一的C#课上时,我们学了this关键字的用法其中包括1.this访问属性2.this访问成员方法3.this访问构造方法.在this访问属性中通过thi ...
- ERROR: Got error reading packet from server: A slave with the same server_uuid/server_id as this slave has connected to the master
centos7.5 做binlog-server,拉取主库binlog报错 问题: [root@db03-53 binlog]# mysqlbinlog -R --host=10.0.0.55 --u ...