置顶!!!

有时候在定义的时候,不要把两个<<或者>>连在一起写,以免被编译器错误理解!!!!

头文件

#include <queue>

queue的一般用法不再叙述

类型名 priority_queue

常用函数

(设变量名为q)

q.pop();
q.push(x);
q.size();
q.empty();
q.top(); //注意与一般的queue中的q.front()不同

一般默认大根堆

使用小根堆的方法

priority_queue<int,vector<int>,greater<int>> q; //当然大根堆就是less

自定义优先级:

方法一:

struct rec{
int a,b
}; struct cmp {
bool operator ()(rec x, rec y)
{
return x.a > y.a; //结构体中,x小的优先级高 (意即大于号出来的是小根堆)
}
};

priority_queue<int, vector<int>, cmp> q; //定义方法

方法二:

struct node {
int x, y;
friend bool operator < (node a, node b)
{
return a.x > b.x; //结构体中,x小的优先级高 (意即大于号出来的是小根堆)
}
};

priority_queue<node>q; //定义方法

//通过自定义operator<操作符来比较元素中的优先级。

//在重载”<”时,最好不要重载”>”,可能会发生编译错误

下面是平板电视的部分

pb_ds头文件

#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
//这个是pb_ds要求的头文件,注意平板电视里面涉及的头文件都不在bits/std标准库中

优先队列(堆)要求的头文件

#include <ext/pb_ds/priority_queue.hpp>

命名空间

using namespace __gnu_pbds;

(当心前面是两个下划线啊,当心啊!!!)

//当然pb_ds还有其他非常好用的数据结构,只不过我现在还不会

//留个坑待填(虽然可能不会填)

常用函数

与priority_queue基本相同

有一些拓展的函数

q.join(q1);  //把q1全部合并到q中去,并且把q1清空
q.point_iterator; //对应某元素的迭代器
q.erase(point_iterator it); //删除对应点
q.modify(point_iterator it,const_reference r_new_val); //修改对应点的值(这是优化dijkstra神方法,均摊复杂度O(1))
//迭代器这一部分我不会啊 又留了一个坑
//如果学会就好了,这个确实很实用

定义方法

__gnu_pbds::priority_queue<int,greater<int>,TAG> Q;//小根堆,大根堆写less<int>
//注意这个里面的前面的__gnu_pbds::不要省略,因为虽然定义了命名空间,但是因为标准库里面也有priority_queue,这个就很ambigious

其中的TAG为类型,有以下几种:

pairing_heap_tag
thin_heap_tag
binomial_heap_tag
rc_binomial_heap_tag
binary_heap_tag
其中pairing_help_tag最快

关于自定义的比较

对于上方的两种方式,经过我的多次实验,发现只有第一个可用,第二种无论我怎么调都是CE,这个与优先队列的定义方法有关

就采用第一种罢!

对于第一种,结构体定义都是一样的

定义方法改成这样

__gnu_pbds::priority_queue<rec,cmp,pairing_heap_tag> Q;

大概就是以上部分

priority_queue(优先队列)的用法(包括pbds)的更多相关文章

  1. priority_queue的常见用法

    priority_queue的常见用法 priority_queue是什么? 优先队列 底层实现用堆来实现 每次队首的优先级最大 priority_queue的定义 引入头文件 # include & ...

  2. 第20章 priority_queue优先队列容器

    /* 第20章 priority_queue优先队列容器 20.1 priority_queue技术原理 20.2 priority_queue应用基础 20.3 本章小结 */ // 第20章 pr ...

  3. stack堆栈容器、queue队列容器和priority_queue优先队列容器(常用的方法对比与总结)

    stack堆栈是一个后进先出的线性表,插入和删除元素都在表的一端进行. stack堆栈的使用方法: 采用push()方法将元素入栈: 采用pop()方法将元素出栈: 采用top()方法访问栈顶元素: ...

  4. priority_queue优先队列/C++

    priority_queue优先队列/C++ 概述 priority_queue是一个拥有权值观念的queue,只允许在底端加入元素,并从顶端取出元素. priority_queue带有权值观念,权值 ...

  5. priority_queue 优先队列用法

    //采用默认优先关系: //(priority_queue<int>que;) //Queue 0: // 91 83 72 56 47 36 22 14 10 7 3 // //采用结构 ...

  6. priority_queue 优先队列

    优先队列是单向队列的一种,可以按照默认或自定义的一种方式来对队列中的数据进行动态排序 template<class _Ty, class _Container = vector<_Ty&g ...

  7. 【转】priority_queue优先队列

    转自:http://www.cppblog.com/shyli/archive/2007/04/06/21366.html http://www.cppblog.com/shyli/archive/2 ...

  8. nyoj 55 懒省事的小明(priority_queue优先队列)

    懒省事的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种 ...

  9. heap堆&&priority_queue优先队列

    堆(heap)不是stl中的东西...它分为 max heap 和min heap. 但我不想用这些,而是采用了priority_queue,优先队列,定义在queue中.顾名思义,它的作用就是无论怎 ...

随机推荐

  1. 如何禁用AD OU 下面的邮箱用户的Exchange ActiveSync 和 适用于设备的OWA

    Get-Mailbox -OrganizationalUnit QQ禁用名单 | Set-CASMailbox  -ActiveSyncEnabled $false -OWAforDevicesEna ...

  2. linux下安装jdk&&Tomcat环境

    linux系统 Centos6 下部署应用服务 jdk-1.7 环境安装:(切换到root用户下操作)1. 在 /usr/local 目录下创建jdk7文件 mkdir /usr/local/jdk7 ...

  3. 【pwnable.kr】cmd1

    最近的pwnable都是linux操作系统层面的. ssh cmd1@pwnable.kr -p2222 (pw:guest) 首先还是下载源代码: #include <stdio.h> ...

  4. 【pwnable.kr】blackjack

    又一道pwnable nc pwnable.kr 9009 读题找到源代码在:http://cboard.cprogramming.com/c-programming/114023-simple-bl ...

  5. 6 —— node —— 响应一个完整的页面

      const http = require('http'); const fs = require('fs'); const server = http.createServer(); server ...

  6. jenkins打包iOS 报错:error: exportArchive: The data couldn’t be read because it isn’t in the correct format.

    在执行ios 打包的时候,我们通过执行下面的指令来打包ipa: mkdir arch archive_path=arch/${app_name}.xcarchive workspace_name=HP ...

  7. 云时代架构阅读笔记七——Java多线程中如何使用synchronized关键字

    关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...

  8. 爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据

    1. Scrapy对接Selenium Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态谊染的页面.在前面的博客中抓取Ja ...

  9. java核心-JVM-gc面试题

    1.写一个memory leak的例子 public class MemonyLeak { //1.memoryLeak内存泄漏 /* 这类错误报错具体显示:java.lang.OutOfMemory ...

  10. 4. Retrieving a mapper(检索映射器)

    Retrieving a mapper(检索映射器) 4.1. The Mappers factory(映射工厂) 可以通过 org.mapstruct.factory.Mappers 类检索映射器实 ...