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. 外网访问内网MariaDB数据库

    外网访问本地MariaDB数据库 本地安装了MariaDB数据库,只能在局域网内访问,怎样从公网也能访问内网MariaDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Mar ...

  2. TeamCity 创建docker构建步骤

    1 dockerfile source 选择dockerfile文件的路径,一共有三种方式: 1.1.1 file content 这种方式是在线写dockerfile文件. 其在进行创建的时候会在 ...

  3. leetcode 1——两数之和

    问题描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  4. deepin Gtk-WARNING **: 无法在模块路径中找到主题引擎:“adwaita”

    虽然没影响使用,但是看着有点不爽. 执行 sudo apt-get install gnome-themes-standard 就可以了.

  5. python3 error 机器学习 错误

    AttributeError: 'NoneType' object has no attribute 'sqrt' 这个错误其实是因为 plt.scatter(x[:,0],x[:,1],x[:,2] ...

  6. 破解360doc个人图书馆网站的右键、复制方法

    chrome浏览器如下做法: 右上角菜单按钮→设置→显示高级设置→隐私设置下的 内容设置按钮→javascript下的管理例外情况→添加 [*.]360doc.com 设置为禁止 →完成

  7. POJ 2663 Tri Tiling 【状压DP】

    Description In how many ways can you tile a 3xn rectangle with 2x1 dominoes?  Here is a sample tilin ...

  8. speech

    1.李开复:一个人的成功,15%靠专业知识,其余15%人际沟通,公众演讲,以及影响他人的能力 2.演讲是一门遗憾的艺术 3.没有准备就等于准备失败 4.追求完美,就是在追求完蛋 5.宁可千日无机会,不 ...

  9. abap 增强查找小程序

    *&---------------------------------------------------------------------* *& Report  ZEXIT *& ...

  10. Java内存模型探秘

    1.Java内存模型概述 Java内存模型是一种抽象概念,不是真实存在的.主要定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存取出变量这样的底层细节.注意:这里的变量仅包括实例字段 ...