c++ STL - priority_queue优先队列详解
简述
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现,其在插入数据会自动排序。
头文件
#include<queue>
声明
priority_queue<T, Cotainer,Compare>
T | - | 存储的元素类型。 |
Container | - | 用于存储元素的底层容器类型。 |
Compare | - | 提供严格弱序的比较 (Compare) 类型。 |
priority_queue <int> i;
priority_queue <double> d;
//后两个不声明默认容器vector,函数less(优先级从小到大)
基本函数
q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回true,否则返回false
q.push();//插入元素,并对底层容器排序
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
#include<iostream>
#include<queue>
using namespace std;
int main()
{
priority_queue<int> q;
for(int i=5;i>=0;--i)
q.push(i);
cout<<"元素个数为:"<<q.size()<<endl;
for(int i=0;i<6;++i)
{
cout<<q.top()<<endl;
q.pop();
}
return 0;
}
运行结果
构造优先级
声明优先队列时默认是less,如何改变优先级呢?
priority_queue<int,vector<int>,less<int> > q;//默认
priority_queue<int,vector<int>,greater<int> > q;
less优先级是栈顶元素从大到小,而greater正好与其相反。
还可根据自己需求构造
#include<iostream>
#include<queue>
#include<cstdlib>
using namespace std;
struct Node
{
int x,y;
Node(int a=0, int b=0):
x(a), y(b) {}
};
struct cmp
{
bool operator()(Node a, Node b)
{
if(a.x == b.x) return a.y>b.y;
return a.x>b.x;
}
};
int main()
{
priority_queue<Node, vector<Node>, cmp> p;
for(int i=0; i<5; ++i)
p.push(Node(rand(), rand()));
while(!p.empty())
{
cout<<p.top().x<<' '<<p.top().y<<endl;
p.pop();
}
return 0;
}
c++ STL - priority_queue优先队列详解的更多相关文章
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
如约而至,Java 10 正式发布! 3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- C++ STL bitset 容器详解
C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串 ...
- 2.3 C++STL vector容器详解
文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...
- [转]c++优先队列(priority_queue)用法详解
既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...
- 优先队列详解priority_queue .RP
) 删除.在最小优先队列(min priorityq u e u e)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用 ...
- c++优先队列(priority_queue)用法详解
转自csdn的文章,仅作为学习笔记.原文链接:https://blog.csdn.net/weixin_36888577/article/details/79937886 普通的队列是一种先进先出的数 ...
- C++ STL 优先队列详解
一.解释: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储. 例如,将元 ...
- STL 优先队列详解
优先队列是一个保证队列里元素单调的队列,我们可以利用它来维护一个线性结构的单调性. 一般的优先队列: 当然需要加头文件 #include <queue> priority_queue &l ...
随机推荐
- HDU 4509
很简单的排序题而已. #include <iostream> #include <cstdio> #include <algorithm> #include < ...
- Eclipse搭建maven开发环境
上一篇学习了maven开发环境的搭建,而且手动编写了一个mavenproject,可是这样子效率非常低下.今天带大家学习在eclipse下搭建maven开发环境. 经常使用的maven命令 mvn c ...
- object-c 不定參数的遍历和原理
object-c接收随意类型的參数: /** * 接收String类型的多个參数 * @param firsParam 第一个參数 */ -(void)TestString:(NSString*)fi ...
- 《Google 软件测试之道》摘录
最近刚刚看完<Google 软件测试之道>,受益颇多,遂记录下: 只有在软件产品变得重要的时候质量才显得重要 第一章:谷歌软件测试介绍 角色介绍 SWE(Software Engineer ...
- Hdu oj 1012 u Calculate e
分析:注意格式. #include<stdio.h> int main() { int i,j,k; double sum=0; printf("n e\n- --------- ...
- jQuery - 制作点击显示二级菜单效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- poj 2142
Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. F ...
- 123D
后缀数组+单调栈 看了好长时间,最后看了张神的程序才搞懂 意思就是求所有子串*n*(n+1)/2 n是子串出现次数 事实上,lcp可以看成宽度为1,高度为lcp值的长方形,所有lcp放在一起就是一堆长 ...
- E20170821-mk
Dimension n. 尺寸; [复] 面积,范围; [物] 量纲; [数] 次元,度,维;
- E20170815-mk
frame n. 框架; 边框; 眼镜框; 组织;