C++优先队列priority_queue

作者:神秘网友 发布时间:2021-02-23 17:20:15

C++优先队列priority_queue

优先队列名叫priority_queue

既然是队列那么先要包含头文件#include , 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。它本质是一个堆实现的

其方法有
和队列基本操作相同:

  • top 访问队头元素
  • empty 队列是否为空
  • size 返回队列内元素个数
  • push 插入元素到队尾 (并排序)
  • emplace 原地构造一个元素并插入队列
  • pop 弹出队头元素
  • swap 交换内容

定义:priority_queueType, Container, Functional
priority_queue int, vectorint, lessint q;为降序,即队列中按照从大到小排序
priority_queue int, vectorint, greaterint q;为降序,即队列中按照从小到大排序
定义这里一定要有空格,不然成了右移运算符↓

Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector)

所以头文件最好加上一个vector,不过优先队列默认从小到大

#include iostream
#include queue
#include string

#include vector

using namespace std;

int main()
{
    priority_queue int, vectorint, lessint q;
    for (int i = 0; i  10; i++)
        q.push(i);
    priority_queueint, vectorint, lessint q_copy(q);
    while (!q_copy.empty())
    {   
        cout  q_copy.top()  endl;
        q_copy.pop();
    }
    return 0;
}

程序实例:

#includeiostream
#include queue
using namespace std;
int main() 
{
    //对于基础类型 默认是大顶堆
    priority_queueint a; 
    //等同于 priority_queueint, vectorint, lessint  a;
    
    //             这里一定要有空格,不然成了右移运算符↓
    priority_queueint, vectorint, greaterint  c;  //这样就是小顶堆
    priority_queuestring b;

    for (int i = 0; i  5; i++) 
    {
        a.push(i);
        c.push(i);
    }
    while (!a.empty()) 
    {
        cout  a.top()  ' ';
        a.pop();
    } 
    cout  endl;

    while (!c.empty()) 
    {
        cout  c.top()  ' ';
        c.pop();
    }
    cout  endl;

    b.push("abc");
    b.push("abcd");
    b.push("cbd");
    while (!b.empty()) 
    {
        cout  b.top()  ' ';
        b.pop();
    } 
    cout  endl;
    return 0;
}

输出

4 3 2 1 0
0 1 2 3 4
cbd abcd abc

参考书《算法竞赛从入门到进阶》,其实不用看,没讲太多

C++优先队列priority_queue 相关文章

  1. C++ STL——vector

    C++ STL——vector vector简介: 1、字义:向量 2、实义:变长数组(长度不一定的数组)——vector可以根据下标访问元素,但是它作为容器更像是链表 3、意义:vector可以避免普通数组(定长数组)超出内存的情况,可以根据需要改变自身长度 4、( 看不懂 )

  2. 从消息队列看OpenStack

    以往介绍openstack的文章通常都是从各个组件的整体角度来进行介绍,并没有深入的介绍组件内部服务究竟是如何通信的。本文这次将换一个角度,从消息队列的角度来看openstack。文章将以pike版本中的nova组件为例进行介绍,由于openstack中所有组件内部服务的通

  3. C++ queue用法

    C++ queue用法 只能访问queue 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。 queue操作 front():返回queue中第一个元素的引用。如果queue是常量,就返回一个常引用,如果queue为空,返回值是未定义的。 back():返

  4. 优先队列——priority queue

    优先队列朴素版之简单应用 合并果子 题意: n个果子,数目为tr[i],进行n - 1次合并操作,每次都消耗两堆果子的重量和的体力,耗费的总体力等于每次合并所耗费的体力和,求最小值 思路1: 使用秘技STL,priority_queue来操作,但这个优先队列是从大到小的,有

  5. 运算符优先级以及执行顺序

    算术运算符 除 /: 1、参与的数类型都是整型时,做取整运算 即商n余m,结果为n 2、只要有一个浮点数参与,就会做类似精确运算 ##取余%: 取余运算符号,也叫取模运算符号 做除法运算时,商n余m,结果为m,而且被除数必须是整数 1、参与运算都是整数时,余数

  6. C++数组的存储与初始化

    下面随笔给出C++数组的存储与初始化的细节内容。 数组的存储与初始化 一维数组的存储 数组元素在内存中顺次存放,它们的地址是连续的。元素间物理地址上的相邻,对应着逻辑次序上的相邻。 例如: 一维数组的初始化 在定义数组时给出数组元素的初始值。 列出

  7. C++ map用法

    C++ map用法 map是STL的一个关联容器,它提供一对一(其中关键字只能在map中出现一次)的数据处理能力。 必须引入 #includemap map的定义 maptype1name, type2name maps;//第一个是键的类型,第二个是值的类型 mapstring, int maps;//也可以这样,需要C++11

  8. v-if和v-for 那个优先级最高如果两个同事出现,应该怎么优化到更好的性能

    测试如下: body div id="app" {{message}} ul li v-for="item in list" v-if="item.state === 0"{{item.name}}/li /ul ul v-if="isShow" li v-for="item in list"{{item.name}}/li /ul /div script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.j

  9. C++Primer plus学习记录第一日.1

    最近在深入一些炫目的源码,发现了大量的CPP的身影,各种C函数穿插其中,我发现我的CPP的学习之路必须开始了。从C转过来的我感觉到这个写法还是比较亲切的。但是特性也好多,我选择C++Primer plus这本经典的书籍进行入门的学习~ 编译的环境选择微软的Visual

  10. VC++-ADO/COM组件创建Excel服务失败

    问题描述 这个问题我印象中我两年前就遇到了,当时我做了一个控制台程序,读写EXCEL。 写好了,一执行就出现这个报错,也找不到什么问题,后来问了我的开发老师苏工。 他一语就点破了问题,COM没初始化! CoInitialize(NULL); 就这么一句代码没加。 今天,时

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词