标签:声明 计数 empty 函数 push ret div code space
今天做题用到了优先队列 对它的用法还不是很熟悉 现在整理一下。
#include<queue> using namespace std;
不过我都用bits/stdc++.h...
priority_queue<Type, Container, Functional>
Type是数据的类型 比如int啊char啊之类的
Container是容器类型默认是vector
Functional是比较的方式 比如greater<int> less<int> 或者自己定义的比较函数
priority_queue <int> q;
这是最基本的用法 不需要像定义一样传三个参数进去 只需要声明一个数据类型即可
需要注意的是 优先队列是默认从大到小排的!
//升序队列 priority_queue <int,vector<int>,greater<int> > q; //降序队列 priority_queue <int,vector<int>,less<int> >q;
因为声明了比较的方式,这次必须要传三个参数进去了
需要注意的是:
typedef struct node { int num; friend bool operator < (const node & a,const node & b) { return a.num < b.num ; } }point;
这个方法是将运算符的重载在结构体的定义中完成,优先队列的的定义中就不需要传三个参数了 在这个小例子里看起来没什么用 不过解决复杂问题时,就需要采用结构体来设计数据结构 也就必须要告诉计算机,比较的方式。
需要注意的是:
typedef struct node { int num; bool operator<(const node&b)const { return num<b.num; } }point;
priority_queue<point>q;
和采用friend bool operator的方法1一样,只是写法略有不同 我不喜欢用 感觉乱乱的....
struct node1 { int x; }; struct node2 { bool operator() (node1 a, node1 b) { return a.x < b.x; } }; priority_queue<node1, vector<node1>, node2> p;
重写仿函数这个用起来真麻烦呀....需要声明两个结构体 不喜欢用....
标签:声明 计数 empty 函数 push ret div code space
原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/11247820.html