priority_queue

  优先队列(Priority Queues):顾名思义,一个有着优先级的队列。它是一种ADT,和队列的思想差不多—— 排队,数据结构中的队列是不能插队的,不能颠倒排队的顺序,而在优先队列里,先出队列的元素不是先进队列的元素,而是优先级高的元素,默认的优先级是数字大的数优先级高。当然用户是可自定义类型的,这样就必须为元素定义一个优先级。因为出队元素不是最先进队的元素,则出队的方法有queue的front() 变为top()。

priority_queue<Type, Container, Functional>

Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。

如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。

定义

namespace std{
template <typename T,
typename Container = vector<T>,
typename Compare = less<typename Container::value_type> >
class priority_queue;
}

注意需要头文件:< queue >

priority_queue<int>pq1;
or
priority_queue<int,deque<int> >pq3;

自定义类型


priority_queue<int,vector<int>,greater<int> >pq2;//优先级定义为数字小的优先级大

相关函数

入队,如例:heap.push(x); 将x 接到队列的末端。
出队,如例:heap.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:heap.front(),即最早被压入队列的元素。
访问队尾元素,如例:heap.back(),即最后被压入队列的元素。
判断队列空,如例:heap.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:heap.size()

插入元素push()


int a[]={,,,,,,,,,};
for(int i=;i<;i++)
{
pq1.push(a[i]);
}

删除元素pop()


pq1.pop();//即删除队头元素,出队

取队头元素top()


int e = pq1.top();//将队头元素的值赋给e

大小

int size = pq1.size();

实例

 #include<cstdio>
#include<queue>
#include<algorithm>
using namespace std; int main()
{
priority_queue<int>pq1; //默认是降序
int a[]={,,,,,,,,,};
for(int i=;i<;i++)
{
pq1.push(a[i]);
}
while(!pq1.empty()){
printf("%d ",pq1.top());//打印出9 8 7 6 5 5 4 3 2 1
pq1.pop();
}
printf("\n"); priority_queue<int,vector<int>,greater<int> >pq2;//可以重写成升序
int b[]={,,,,,,,,,};
for(int i=;i<;i++)
{
pq2.push(b[i]);
}
while(!pq2.empty()){
printf("%d ",pq2.top());//打印出1 2 3 4 5 5 6 7 8 9
pq2.pop();
}
printf("\n");
priority_queue<int,deque<int> >pq3;
int c[]={,,,,,,,,,};
for(int i=;i<;i++)
{
pq3.push(c[i]);
}
int size = pq3.size();
printf("%d\n",size); //输出10
while(!pq3.empty()){
printf("%d ",pq3.top());//打印出9 8 7 6 5 5 4 3 2 1
pq3.pop();
}
return ;
}

STL priority_queue的更多相关文章

  1. STL - priority_queue(优先队列)

    优先级队列priority_queue 最大值优先级队列.最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用. priority_queue<int ...

  2. 详解C++ STL priority_queue 容器

    详解C++ STL priority_queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(priority_queue\)容器的使用方法和常见的使用技巧. priority_queue容器 ...

  3. C++ 之STL priority_queue

    priority_queue 对于基本类型的使用方法相对简单.他的模板声明带有三个参数,priority_queue<Type, Container, Functional>Type 为数 ...

  4. 【转载】C++ STL priority_queue用法

    priority_queue 对于基本类型的使用方法相对简单.他的模板声明带有三个参数,priority_queue<Type, Container, Functional> Type 为 ...

  5. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  6. STL priority_queue 优先队列 小记

    今天做题发现一个很有趣的地方,竟然还是头一次发现,唉,还是太菜了. 做图论用STL里的priority_queue去优化prim,由于特殊需求,我需要记录生成树中是用的哪些边. 于是,我定义的优先队列 ...

  7. STL priority_queue sort 自定义比较终极模板

    比较有两种重载,一种是类内部的bool operator<( 只有一个参数 ),当然bool operator< 也可以拿到类的外面:另外一种是写一个cmp,利用cmp返回作为sort的第 ...

  8. C++STL priority_queue

    priority_queue优先级队列 最大值优先级队列(队头是最大值)  最小值优先级队列(队头是最小值) priority_queue<int> q1;//默认定义为最大值优先级队列 ...

  9. STL - priority_queue(优先队列)

    参考:http://www.cnblogs.com/xzxl/p/7266404.html 一.基本定义: 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大 ...

  10. 牛客网 牛客练习赛7 B.购物-STL(priority_queue)

    B.购物 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 在遥远的东方,有一家糖果专卖店 这家糖果 ...

随机推荐

  1. django 使用mysql数据库

    一 修改settings里面的配置文件 import pymysql # 一定要添加这两行!通过pip install pymysql! 或者pycharm 里面安装 pymysql.install_ ...

  2. SpringBoot整合MongoDB JPA,测试MongoRepository与MongoTemplate用法,简单增删改查+高级聚合

    源码 地址 -> https://github.com/TaoPanfeng/case/tree/master/04-mongo/springboot-mongo 一 引入依赖 <depe ...

  3. sql 存储过程笔记2

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sys_Page_v2]') and OBJECTPROPE ...

  4. 通俗讲解python__new__()方法

    目录 通俗讲解python__new__()方法 引子: 小结: 通俗讲解python__new__()方法 转载于别人的博客https://blog.csdn.net/sj2050/article/ ...

  5. RHEL7 网口绑定Network Teaming

    1.选择Networking Teaming配置方法 使用文本用户界面工具nmtui 使用命令行工具nmcli 使用ifcfg配置文件创建网络成组 使用图形用户界面配置网络成组     2.了解主接口 ...

  6. [ZOJ 3610] Yet Another Story of Rock-paper-scissors

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4713 题目很水,但是注意,越是简单的题目越应该关注细节,比如说输出上 ...

  7. java 使用poi读取word文档存入数据库

    使用的poi jar包需要自己下载 读取的word文档中含有多个图片,所以分为两个部分,一个部分读取各个表格中内容,一个是将所有图片截取出来: /** * 遍历段落内容 * docxReadPath ...

  8. inclusion_tag模块

    目录 inclusion_tag模块 inclusion_tag模块 1.当页面上某一块区域的内容需要在多个页面上展示的使用,并且该区域的内容需要通过传参数才能正常显示,那么我们可以优先考虑inclu ...

  9. Codeforces 839E Mother of Dragons

    题 OvO http://codeforces.com/contest/839/problem/E (Codeforces Round #428 (Div. 2) - E) 解 首先,k肯定是要平均分 ...

  10. electron-vue [Vue warn]: Failed to resolve directive: decorator

    electron-vue引入ant-desigin-vue使用ant自定义指令 v-decorator报销 <a-form-item> <a-input v-decorator=&q ...