c++ 优先级队列(priority_queue)
从网上搜优先级队列用法,都是有些乱七八糟的,有几种用法都没说,直接贴代码。实在郁闷,于是自己在此归纳归纳。
废话不多说,直入主题。
优先级队列的核心是比较函数的实现。
比较函数有两种实现方法:
1、在结构体或类外面定义一个比较结构体。 //假如有个Point结构体。则new对象的时候:priority_queue<Point,vector<Point>,cmp> pg;其中cmp是自定义比较函数
2、在结构体或类中自己重载<操作符。 //假如有个Point结构体。这种方式定义优先级队列: priority_queue<Point> pg;
第1种方法实现代码:
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector> using namespace std; class Point
{
public:
int x,y;
}; struct cmp
{
bool operator()(Point a,Point b)
{
return a.x>b.x; //返回 !cmp
}
}; priority_queue<Point,vector<Point>,cmp> pq;
Point p; int main()
{
int n;
while(cin>>n)
{
while(!pq.empty()) pq.pop();
while(n--)
{
cin>>p.x>>p.y;
pq.push(p);
}
while(!pq.empty())
{
cout<<pq.top().x<<"-"<<pq.top().y<<" ";
pq.pop();
}
}
return 0;
}
第2种方法实现代码:
#include <iostream>
#include <queue>
#include <algorithm>
#include <functional>
#include <vector> using namespace std; class Point
{
public:
friend bool operator <(Point a,Point b);
int x,y;
}; //友元函数在外面实现 也可在类里面实现
bool operator <(Point a,Point b) //优先级队列要求必须要实现<的重载,否则编译错误 而int型有默认的<函数。
{
return a.x>b.x; //返回比较结果的相反值,这种情况是从小到大排序
} /** 友元函数在类里面实现如下
class Point
{
public:
friend bool operator <(Point a,Point b)
{
return a.x>b.x;
}
int x,y;
};
**/
priority_queue<Point> pq;
Point p; int main()
{
int n;
while(cin>>n)
{
while(!pq.empty()) pq.pop();
while(n--)
{
cin>>p.x>>p.y;
pq.push(p);
}
while(!pq.empty())
{
cout<<pq.top().x<<"-"<<pq.top().y<<" ";
pq.pop();
}
}
return 0;
}
c++ 优先级队列(priority_queue)的更多相关文章
- STL学习系列七:优先级队列priority_queue容器
1.简介 最大值优先级队列.最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用,请对stl的类库,多做扩展性学习 这里给个例子: #include< ...
- C++ STL 学习笔记__(6)优先级队列priority_queue基本操作
10.2.7优先级队列priority_queue v 最大值优先级队列.最小值优先级队列 v 优先级队列适配器 STL priority_queue v 用来开发一些特殊的应用,请对stl的类 ...
- C++ - 库函数优先级队列(priority_queue)输出最小值 代码
库函数优先级队列(priority_queue)输出最小值 代码 本文地址: http://blog.csdn.net/caroline_wendy 库函数优先级队列(priority_queue)的 ...
- STL之优先级队列priority_queue
摘要: priority_queue,自适应容器(即容器适配器):不能由list来组建: 最大值优先级队列(最大值始终在对首,push进去时候) 最小值优先级队列: 优先级队列适配器 STL pri ...
- STL中的优先级队列priority_queue
priority_queue(queue类似)完全以底部容器为根据,再加上二叉堆(大根堆或者小根堆)的实现原理,所以其实现非常简单,缺省情况下priority_queue以vector作为底部容器.另 ...
- STL中的优先级队列(priority_queue)的自己实现priqueue
这篇文章主要介绍堆(最大堆和最小堆),以及一些系统对一些任务,比如线程,进程做调度的时候,所采用的优先级队列. 主要思想就是,做一个最大堆(任务的权重最大的在顶端),把顶端的任务取出,重新做一个堆,处 ...
- 优先级队列Priority_queue
定义 拥有权值观点的queue,,一个是返回最高优先级对象,一个是在底端添加新的对象.这种数据结构就是优先级队列(Priority Queue) . 实现 利用max_heap完成,以vector表现 ...
- STL-优先级队列-priority_queue
头文件是<queue> 操作很简单 #include <iostream> #include <cstdio> #include <queue> usi ...
- cb05a_c++_STL优先级队列priority_queue_less_greater
/*cb05a_c++_STL优先级队列priority_queue自适应容器(容器适配器):不能使用list,list不能使用随机操作最大值优先级队列,//把数据放在队列里面是,最大的始终都是放在最 ...
随机推荐
- str使用注意点(未完待续)
1.(切片)str[num1,num2],是指截取 str[num1] 到 str[num2-1] 直接的元素
- 【4】Django 创建第一个模块应用
大成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 --老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问 ...
- ThinkPHP5.0 模型查询操作
1.获取单个数据 //取出主键为1的数据 $user = User::get(1); echo $user->name; // 使用数组查询 $user = User::get(['name' ...
- reset清除所有浏览器默认样式
温馨提示 reset 的目的不是清除浏览器的默认样式, 这仅是部分工作. 清除和重置是紧密不可分的.reset 的目的不是让默认样式在所有浏览器下一致, 而是减少默认样式有可能带来的问题.reset ...
- java IO(BIO)、NIO、AIO
IO 服务端ServerSocket 客户端Socket 缺点每次客户端建立连接都会另外启一个线程处理.读取和发送数据都是阻塞式的. 如果1000个客户端建立连接将会产生1000个线程 Server端 ...
- HDU - 2973 - YAPTCHA
先上题目: YAPTCHA Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Spring 学习二-----AOP的原理与简单实践
一.Spring AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ...
- 洛谷 P2399 non hates math
P2399 non hates math 题目背景 non习惯将分数化成小数,但在数学中要以分数形式写,不能化成小数 因此non找到了会编程的你,帮助他将小数化回分数 题目描述 给出一个小数,将它化成 ...
- pt-kill--- MySQL数据库CPU飙升紧急处理方法
MySQL数据库CPU飙升紧急处理方法 [日期:2014-01-22] 来源:Linux社区 作者:hcymysql [字体:大 中 小] 运行平稳的数据库,如果遇到CPU狂飙,到80% ...
- 【小超_Android】GitHub源码项目整理,希望对大家有帮助
收集的经常使用Github上比較优秀的项目,希望对大家日常开发有所帮助: AndroidSlidingMenu https://github.com/jfeinstein10/SlidingMen ...