栈、队列、优先队列详解

栈(stack)

栈从潜在容器的尾部将元素推入,也是将元素从潜在容器的尾部将元素移除。栈可以看成一个没有前门,只有后门的房子。从后门进去之后,后进去的人就会先从后门出来。

在这里插入图片描述

队列(queue)

队列将元素push到潜在容器的尾部,从潜在容器的前部弹出。队列可以看成是一个验票的地方,票验完之后直接就上车了。

在这里插入图片描述

所以先进先出。First in First out.

优先队列详解

优先队列定义于 https://cplusplus.com/reference/queue/ 这个头文件中。该头文件存在两个容器类,一个是queue, 另一个是priority_queue. 第一个是先进先出队列,第二个是优先队列。

优先队列是一类容器适配器(container adaptor), 专门设计来使得**它的第一个元素总是它所包含的“最优先“的那个元素,**优先的标准某种strict weak ordering 标准(严格弱序列标准)。

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;

上述是priority_queue的模板类定义。Compare提供了”优先”的定义。

关于Compare: 如果Compare的第一个参数位于第二个参数的前面,则返回true. 例如上述模板类的默认参数是std::less ,即数字小的位于前面,而优先队列的的第一个(front)元素是最大的元素,故在compare函数中位于前面的元素实际上后输出。即队列的front包含了根据Compare所规定的弱排序的位于后边的元素。仍然以less为例,2<3, 2位于3的前面。 故2后输出。可以形象地记忆为:位于小于号左边的人先来,先来的人在售票大厅门口等着,将前面的位置留给后来的德高望重的人。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ChenglinBen/article/details/130973422