巧用优先队列:重载运算符在STL优先队列中的应用
前言
写优先队列优化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优先队列中的应用的更多相关文章
- 优先队列重载运算符< 以及初始化列表
优先队列定义 priority_queue<int, vector<int>, greater<int> >pq; 优先队列重载<运算符 在结构体中定义一个 ...
- 优先队列重载<运算符
https://vjudge.net/problem/POJ-3190 #include<iostream> #include<cstdio> #include<queu ...
- Luogu P2278 [HNOI2003]操作系统【优先队列/重载运算符/模拟】 By cellur925
题目传送门 本来是照着二叉堆的题去做的...没想到捡了个模拟...不过模拟我都不会...我好弱啊... 其实核心代码并不长,比辰哥的标程短到不知哪里去...但是思路需要清晰. 读题的时候我明白,当有优 ...
- STL优先队列——踩坑日记
priority_queue 可以定义STL中的优先队列,但是优先队列在应用于自己定义的类型时需要重载<运算符,或者通过仿函数来定义比较方法,在定义比较方法的过程中,比较大的坑是STL中对于参数 ...
- 合并果子(STL优先队列)
STL优先队列:priority_queue 定义:priority_queue<int>q; 从小到大:priority_queue<int,vector<int>,g ...
- CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)
CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆) Description 有n个函数,分别为F1,F2,...,Fn.定义 \(Fi(x)=Aix^2+Bix ...
- C++STL——优先队列
一.相关定义 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这 ...
- CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)
CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...
- 基于STL优先队列和邻接表的dijkstra算法
首先说下STL优先队列的局限性,那就是只提供入队.出队.取得队首元素的值的功能,而dijkstra算法的堆优化需要能够随机访问队列中某个节点(来更新源点节点的最短距离). 看似可以用vector配合m ...
随机推荐
- (5)air202读取串口数据并上传到阿里云显示
一.首先进行云端设置 根据串口助手显示的信息,以及模块文档说明我们可以知道 其中red和ir是红光LED的原始数据, HR表示心率值, HRvalid是心率是否有效标识, SP02是血氧数值,,SPO ...
- linux &和&&,|和||
&和&&,|和||区别: & 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server & && 表示前一 ...
- web项目中的浏览器行为和服务器行为
package day10.think_about_path; import java.io.IOException; import javax.servlet.ServletException; i ...
- SpEL表达式注入漏洞学习和回显poc研究
目录 前言 环境 基础学习和回显实验 语法基础 回显实验 BufferedReader Scanner SpEL漏洞复现 低版本SpringBoot中IllegalStateException CVE ...
- Linux命令集锦之·正则表达式
时间:2018-11-15 记录:byzqy 正则表达式与通配符: 正则表达式,用来在文件中匹配符合条件的字符串,正则是包含匹配. grep.awk.sed 等命令可以支持正则表达式. 通配符,用来匹 ...
- Learning ROS: Using a C++ class in Python
http://wiki.ros.org/ROS/Tutorials/Using%20a%20C%2B%2B%20class%20in%20Python This tutorial illustrate ...
- MySQL alter table时执行innobackupex全备再看Seconds_Behind_Master
1.场景描述 早上7:25 接到Report中心同学告警,昨天业务报表数据没有完整跑出来,缺少500位业务员的数据,并且很快定位到,缺少的是huabei_order库上的数据.Report中心的数据是 ...
- MySQL中的seconds_behind_master的理解
通过show slave status查看到的Seconds_Behind_Master,从字面上来看,他是slave落后master的秒数,一般情况下,也确实这样,我们可以通过Seconds_Beh ...
- Linux centos7 pstree
2021-08-12 1.命令简介pstree (display a tree of processes) 命令用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以直观地看出是谁创建了谁. ...
- Python中的私有属性私有方法、类属性类方法以及单例设计模式
私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...