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的更多相关文章

  1. 标准模板库(STL)学习探究之stack

    标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string

  2. STL学习系列之一——标准模板库STL介绍

    库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...

  3. 标准模板库--STL

    标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...

  4. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  5. C++ 标准模板库(STL)

    C++ 标准模板库(STL)C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), ...

  6. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  7. 实验8 标准模板库STL

    一.实验目的与要求: 了解标准模板库STL中的容器.迭代器.函数对象和算法等基本概念. 掌握STL,并能应用STL解决实际问题. 二.实验过程: 完成实验8标准模板库STL中练习题,见:http:// ...

  8. C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...

  9. C++ 标准模板库STL 队列 queue 使用方法与应用介绍

    C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...

  10. C++的标准模板库(STL)简介

    STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的.在被引入C++之前该技术就已经存在了很长的一段时间.后来STL成为ANSI ...

随机推荐

  1. IP通信基础学习第六周(上)

    CSAM:冲突检测 链路:是指一条无源的点到点的物理线路段,且中间没有任何其它的交换结点. 数据链路:把实现相关规程的硬件和软件加到链路上. 数据链路层的功能:链路管理,信息的传输,流量与差错控制,异 ...

  2. SQLSERVER列出所有用户权限

    --服务器级权限WITH CTE AS(SELECT u.name AS 用户名,u.is_disabled AS 是否禁用,g.name as 服务器角色,'√' as 'flag'FROM sys ...

  3. Appium(一)---环境搭建的一些问题

    最近开始学习Appium,一款很不错的自动化测试工具,网上已经有大量的环境搭建教程,我就不再细说,我搭建环境时主要参考如下两个博客https://www.cnblogs.com/yoyoketang/ ...

  4. mysql8操作命令(持续更新)

    mysql服务管理 查看服务状态 systemctl status mysqld.service 启动服务 systemctl start mysqld.service 关闭服务 systemctl ...

  5. ltp-ddt git

    ltp-ddt目录下有一个文件夹 confrVOaeL confvp5WrA 这个文件夹是由./configure --host=arm-linux-gnueabihf命令生成的. 每次configu ...

  6. docker环境下的测试

    docker作为容器常见用于快速部署,最近有个项目是基于docker的,总结一下docker的测试. 1.在主机中安装Docker: ubuntu安装:curl -s https://get.dock ...

  7. Appium测试安卓apk遇到的问题及解决方法

    1.Showing error - “Returned value cannot be converted to WebElement: {ELEMENT=1}  解决方法:https://sqa.s ...

  8. SPOJ DQUERY D-query(主席树 区间不同数个数)

    题意:问你区间有几个不同的数 思路:主席树nb.我们知道主席树每一个root都存着一棵权值线段树,现在我们在每个root中存位置,也就是01表示这个位置存不存在.然后我们用一个fa[a[i]]表示a[ ...

  9. (转) NAS(神经结构搜索)综述

    NAS(神经结构搜索)综述 文章转载自:http://www.tensorinfinity.com/paper_136.html 本文是对神经结构搜索(NAS)的简单综述,在写作的过程中参考了文献[1 ...

  10. 【搬运工】mysql用户权限设置

    关于mysql的用户管理,笔记 1.创建新用户 通过root用户登录之后创建 >> grant all privileges on *.* to testuser@localhost id ...