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. MySQL数据库笔记二:数据类型及数据库操作

    三.MySQL数据库数据类型 MySQL数据库中支持多种数据类型:数值型.字符型.日期型 常用的数据类型: 1.整型 int:整形,存储整数 int(M):M表示预期值.与存储大小和数值的范围无关. ...

  2. python入坑级

    pycharm设置 pycharm设置自动换行的方法 只对当前文件有效的操作:菜单栏->View -> Active Editor -> Use Soft Wraps: 如果想对所有 ...

  3. mysql_jdbc连接说明

    mysql JDBC Driver 常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysq ...

  4. stm32定时器计数功能

    stm32的外部时钟源模式2和外部时钟源模式1都可以用来实现计数功能,他们的区别是什么呢? 以上2种模式对应不同的管脚输入: 外部时钟源模式2 <-->TIMx_ETR 外部时钟源模式1  ...

  5. ISO/IEC 15444-12 MP4 封装格式标准摘录 3

    目录 Track Data Layout Structures Data Information Box Data Reference Box Sample Size Boxes Compact Sa ...

  6. c++编程的字符集及其转换

    一.两种字符集 多字节字符集(MBCS):因为计算机最早是在英语国家诞生的,大多数英文信息是由英文字母.数字以及一些其它字符构成了一个128个字符的ASCII字符集.本来这对于英语国家来说够用了.但是 ...

  7. 打造高效 VIM

    删除空行 删除1到10行的空行 :1,10g/^$/d 命令行快捷命令 Bang(!)命令 上一条命令:!! 使用上一条命令的所有参数:!* 使用上一条命令的最后一个参数:!$ 使用上一条命令中除了最 ...

  8. ACwing 196. 质数距离

    #include <bits/stdc++.h> using namespace std; , M = ; int v[M]; long long prime[N],prim[N]; ; ...

  9. K nearest neighbor cs229

    vectorized code 带来的好处. import numpy as np from sklearn.datasets import fetch_mldata import time impo ...

  10. Summer training #5

    B:分析序列 构造树(优先队列) #include <bits/stdc++.h> #include <cstring> #include <iostream> # ...