前言

写优先队列优化dijkstra的时候,需要放进优先队列的常常有数值和编号两类,以下介绍让编号捆绑数值放入优先队列的几种方法。

由于过程比较简单,记住代码即可,下面不再讲解,只附上代码,请读者自行理解。

1.pair<>

#include<queue>

priotity_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;//最小值优先

priotity_queue<pair<int,int>,vector<pair<int,int> >,less<pair<int,int> > > q;//最大值优先

priority_queue<pair<int,int> > q;//什么都不加默认最大值优先;

q.push(make_pair(w,v));// pair默认按前者大小排序,故权值之类要放到前边;

w=q.top().first;
v=q.top().second;

2.结构体+比较函数

#include<queue>

struct ne{
int w;
int v;
}; struct cmp{
bool operator()(int &a,int &b){
return a>b; //最小值优先
}
}; struct cmp{
bool operator()(int &a,int &b){
return a<b; //最大值优先
}
}; priority_queue<ne,vector<ne>,cmp> q;

3.结构体+重载运算符

#include<queue>

struct ne{
int w;
int v;
bool operator < (const ne &a) const{
return w<a.w;//最大值优先
}
}; struct ne{
int w;
int v;
bool operator < (const ne &a) const{
return w>a.w;//最小值优先
}
}; priority_queue<int> q;

附:结构体内初始化及赋值

struct ne{
int x;
int y;
ne(){
x=0;
y=0;
}
ne(int a,int b){
x=a;y=b;
}
};
//具体应用 queue<ne> q; //栈,队列等的压入;
q.push(ne(x,y)); ne now; //结构体数据类型的赋值;
now=ne(x,y);

巧用优先队列:重载运算符在STL优先队列中的应用的更多相关文章

  1. 优先队列重载运算符< 以及初始化列表

    优先队列定义 priority_queue<int, vector<int>, greater<int> >pq; 优先队列重载<运算符 在结构体中定义一个 ...

  2. 优先队列重载<运算符

    https://vjudge.net/problem/POJ-3190 #include<iostream> #include<cstdio> #include<queu ...

  3. Luogu P2278 [HNOI2003]操作系统【优先队列/重载运算符/模拟】 By cellur925

    题目传送门 本来是照着二叉堆的题去做的...没想到捡了个模拟...不过模拟我都不会...我好弱啊... 其实核心代码并不长,比辰哥的标程短到不知哪里去...但是思路需要清晰. 读题的时候我明白,当有优 ...

  4. STL优先队列——踩坑日记

    priority_queue 可以定义STL中的优先队列,但是优先队列在应用于自己定义的类型时需要重载<运算符,或者通过仿函数来定义比较方法,在定义比较方法的过程中,比较大的坑是STL中对于参数 ...

  5. 合并果子(STL优先队列)

    STL优先队列:priority_queue 定义:priority_queue<int>q; 从小到大:priority_queue<int,vector<int>,g ...

  6. CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)

    CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆) Description 有n个函数,分别为F1,F2,...,Fn.定义 \(Fi(x)=Aix^2+Bix ...

  7. C++STL——优先队列

    一.相关定义 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这 ...

  8. CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)

    CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...

  9. 基于STL优先队列和邻接表的dijkstra算法

    首先说下STL优先队列的局限性,那就是只提供入队.出队.取得队首元素的值的功能,而dijkstra算法的堆优化需要能够随机访问队列中某个节点(来更新源点节点的最短距离). 看似可以用vector配合m ...

随机推荐

  1. UWP 动画之路径

    xml --------------------------------------------- <Page x:Class="MyApp.MainPage" xmlns= ...

  2. JAVA中多态与C++多态的区别

    原文出自:http://blog.csdn.net/hihui/article/details/8604779 #include <stdio.h> class Base { public ...

  3. Flink的CheckPoint

    Checkpoint checkpoint是Flink容错的核心机制.它可以定期的将各个Operator处理的数据进行快照存储(Snapshot). 如果Flink程序出现宕机,可以重新从这些快照中恢 ...

  4. 浅谈可持久化Trie与线段树的原理以及实现(带图)

    浅谈可持久化Trie与线段树的原理以及实现 引言 当我们需要保存一个数据结构不同时间的每个版本,最朴素的方法就是每个时间都创建一个独立的数据结构,单独储存. 但是这种方法不仅每次复制新的数据结构需要时 ...

  5. go语言调用everything的SDK接口

    介绍 官方SDK地址 本项目会将官方dll编译到可执行程序中,运行时无需考虑dll问题. 根据官方介绍,使用SDK前需要运行everything程序. 执行go build -tag ASCII时编译 ...

  6. ActiveMQ和消息中间件概念

    一.概念

  7. NOIP模拟51

    樱花满地集于我心,楪舞纷飞祈愿相随 前言 太菜了,人手切掉两个题,我竟然一道都不会.. 改 T3 的时候整个人的心态都崩掉了,一部分原因可能是语文素养不高导致我看不懂题解. 另一部分可能就是系太不太好 ...

  8. Spring-图解

  9. shell脚本———双重循环——九九乘法表

    1.基础双重循环模板 2.break跳出单个循环 3.continue中止某次循环中的命令,但不会完全中止整个命令 4.九九乘法表

  10. JAVA反序列化漏洞基础原理

    JAVA反序列化漏洞基础原理 1.1 什么是序列化和反序列化? Java序列化是指把Java对象转换为字节序列的过程: Java反序列化是指把字节序列恢复为Java对象的过程: 1.2 为什么要序列化 ...