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 ...
随机推荐
- Git 教程(三):仓库与分支
远程仓库 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了, ...
- JQuery 中$("input:eq(0)") eq 的意思
:eq(index)匹配一个给定索引值的元素 ----------------------------------------------------- Matches a single elemen ...
- kibana查询语法 使用教程
1. 使用双引号包起来作为一个短语搜索: "like Gecko" 2. ? 匹配单个字符; * 匹配0到多个字符 例如:kiba?a, el*search ? * 不能用作第一个 ...
- textspan 转连接
import 'package:flutter/material.dart'; import 'package:flutter/gestures.dart'; import 'package:url_ ...
- Gatling实战(二)
在上一篇实战讲解了Gatling的用例,不过还没涉及到性能方面的内容,其实用例中的最后一句就和性能有关了 setUp(scn.inject(atOnceUsers(1)).protocols(http ...
- Exp5 MSF基础应用 20164303景圣
一.实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.一个主动攻击实践,如ms08_067; (成功) 2.一个针对浏览器的攻击,如ms1 ...
- wordpress安装教程
最近安装了wordpress来搭建自己的网站,过程有些艰辛,以防以后转移服务器再次遇到这个难题,在此记下自己的这次安装过程以及一些问题,同时也供遇到相同问题的初次接触者做参考. 另外说明一下我用的操作 ...
- analysed of J-SON/XML processing model Extend to java design model (J-SON/XML处理模型分析 扩展到Java设计模型 )
一.JSON和XML 1.JSON JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.可在不同平台之间进行数据交换.JSON ...
- qt 串口
if(ui->connectSerialBtn->text() == tr("打开串口")) { //ui->showSerialInfo->setEnab ...
- JS(JavaScript)的进一步了解7(更新中···)
1.Js操作css样式 div.style.width=”100px”.在div标签内我们添加了一个style属性,并设定 了width值.这种写法会给标签带来大量的style属性,跟实际项目是不符. ...