1.普通队列
头文件 : include<queue>
构造队列Q : queue <队列类型> Q
部分操作:
Q.push(x) 入队
Q.pop() 出队
Q.top() 读取队首元素
Q.back() 读取队尾元素
Q.empty() 判断队列是否为空 为空返回true
Q.size() 查询队列长度
清空队列 : 一个一个pop()
2. 优先队列(好像就是堆)
特点:在队列的基础上把队中的元素按照(一定的方式)排序了
头文件: include<queue>
构造优先队列Q : priority_queue <队列中元素类型,容器类型,一定的方式> Q
元素类型: 不解释
容器类型 :一般就是 vector(应该是默认)
一定的方式!!(我觉得这里是关键):
1.默认方式:就是空着不写
priority_queue <int> Q; 这里只写了元素类型 也就是默认容器类型和一定的方式
排序结果:从大到小排 也就是递减 也就是队首元素是最大的。。。
2.自己选择递增还是递减,这个有固定的写法 2种
(个人观点) 优先队列就是按照 '<' 和 '>' 来对队列进行排序
其中 '<' 对应的函数是less也就是递减来排
'>'对应的是greater也就是递增来排
priority_queue < int,vector<int>,less<int> > Q 递减
priority_queue <int,vector<int>,greater<int> > Q 递增
3.自定义优先队列(就是自己写一个结构体 按照这个结构体来排序)
struct ppp
{
int a;
int b;
};
bool operator < (ppp k , ppp t)
//这里把 ‘<’ 重载了 就是把 ‘<’ 的判断标准改了 也就是把less的操作方式改了
{
return k.a < t.a; //改为根据a的大小 来对队列递减排序(前面说了‘<’对应递减)
}
//也可以重载 ‘>’
priority_queue <ppp , vector<int> , less<int> > Q; //因为我们把 ‘<’ 重载了所以现在的less就是按照结构体来排序的 不过还是递减 只是不是单纯比较队中元素大小 而是根据结构体中a的大小来比较, 比如Q.top() 就是输出队中对应a值最大的元素
操作:
优先队列没有 Q.back()操作
其他和队列相同
第一次写东西 觉得还要改进 感觉屁话太多 先不公开了 哪有脸公开呀。。