前言
本来是想把第十七题那个任务调度器的题给写了,但是我看题解看不懂,所以就去学基础知识了,然后就学了优先级队列。
在题解里看到说用堆来解决,用优先级队列来解决,这给我干懵了,我个菜鸡零基础,给我说这个,属实不太懂,然后就补了一些知识,如下:
1 什么是优先级队列
优先级队列与队列一样,只能从队尾插入元素,从队首删除元素,但是它有一个特性,就是队列中最大的元素总是位于队首,一般说用堆的思想其实就是指的优先级队列。优先级队列详细解释
(1)头文件:#include
(2)声明方法:priority_queue q;
(3)基本函数:
在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。
对于基础类型,一般是数字大的优先级高,对于字符,就是字典序越大,优先级越高。
priority_queue的用途以及注意点
1、解决贪心问题
2、注意在使用top()之前要判空使用empty()
2 deque和queue的区别
deque是双端队列,也就是说在队列的头部尾部都可以进行快速的插入或者删除。
常用函数:(deque deq)
(1)deq.size() 返回队列内元素的个数
(2)deq.at(int n) 该函数自动检查n是否在队列中的有效元素范围内,如果不在,即n>deq.size(),则抛出异常,
(3)deq.front() 返回队头元素
(4)deq.back() 返回队尾元素
(5)deq.push_back() 在头尾插入元素
(6)deq.push_front ( ) 在队头插入元素
(7)deq.pop_back() 删除队尾元素
(8)deq.pop_front() 删除队头元素
而queue则是严格意义上的队列,智能从队尾插入元素,从队头删除元素。
常用函数
push:在队尾插入一个元素
pop:删除队头元素
size:返回队列中元素的个数
front:返回队列中的第一个元素(并没有剔除队列,只是返回)
back:返回队列中最后一个元素。