c++ 队列

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()操作

其他和队列相同

 

 

第一次写东西 觉得还要改进 感觉屁话太多 先不公开了 哪有脸公开呀。。

 

上一篇:2019.12.09 Random 随机数类


下一篇:弹性盒子 列表居中问题。