STL常用函数总结-queue+priority_queue

队列也是STL里面常用的一个容器,名字十分形象,所谓队列,就是排队,早来早走,队列的特点就是这样,先入先出

头文件:#include< queue >
初始化: queue< 存储元素类型 > 队列名称

常用的函数操作:
①back()返回最后一个元素
②empty()如果队列空则返回真,用于判断队列是否为空
③front()返回第一个元素
④pop()删除第一个元素
⑤push()在末尾加入一个元素
⑥size()返回队列中元素的个数

根据队列的特点,队列的操作出队是在队列头进行的,而入队则是在队列尾部进行的。不同于之前提到的,队列是没有clear()函数的,所以在清空时需要遍历一遍,即

while(!q.empty())
{
	q.pop();
}

除此之外,queue有一点不好之处,就是他不能进行遍历,要想遍历队列中的全部元素,只能将全部元素出队,也就是说会摧毁当前的队列,如果实在需要保留原来的队列的话,只能够在输出的同时另外存一遍,确实是不太方便的地方。

在BFS时一般需要用到队列来存储节点,从而实现按照层来搜索的过程,此外在二叉树的层序遍历的时候也会用到队列的结构。

队列的进阶叫做优先队列,是在队列基础上的延伸。优先队列就是将队列中的元素赋予优先级,在访问优先队列中的元素时,具有最高优先级的元素先被访问。队列时先进先出,而优先队列是优先级最高的先出。

头文件:#include< queue >
初始化:priority_queue<数据类型, 容器类型, 比较方式>
这里需要提一下,容器类型只能是数组实现的容器,比如向量这种,比较方式是当需要自定义的时候才需要传入的,默认情况下只需要传入第一个量数据类型,在这种情况下默认会将数据排列成大顶堆
priority_queue <int,vector< int >,greater< int > > q; //升序队列
priority_queue <int,vector< int >,less< int > >q; //降序队列
priority_queue< node >q; // node为结构体,可以自定义优先级

另外,对于自定义的比较方式,这里就很想sort函数的cmp,也是需要自己进行编写的,尤其是数据类型为结构体的时候,此时需要用到C++中的重载,重载运算符来实现优先级的判断
struct node {
  int x, y;
  friend bool operator < (node a, node b)
  {
    return a.x > b.x; //结构体中,x小的优先级高
  }
};
priority_queueq; //定义方法

基本的操作和队列一样,依然是用法一样的六个函数,优先队列只不过比队列多了一个根据优先级排序的功能,其余都是类似的。

猜你喜欢

转载自blog.csdn.net/weixin_43849505/article/details/86808491
今日推荐