Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获得队列的最小值和最大值?_C++_Data Structures_Stl_Queue - Fatal编程技术网

C++ 如何获得队列的最小值和最大值?

C++ 如何获得队列的最小值和最大值?,c++,data-structures,stl,queue,C++,Data Structures,Stl,Queue,您能否像队列一样设计一个数据结构,其中包含“入队列”、“出队列”、“最小值”和“最大值”? 我知道一种方法,可以让队列使用两个堆栈分别找到最小值和最大值,但是如何同时获得这两个值呢 感谢数据结构是一种众所周知的结构,称为优先级队列。 队列中的每个元素都有一个相关的优先级,队列保持从高到低的排序顺序 队列中的每个元素都必须具有优先级,并且代码必须维护订单契约 一些STL包含优先级队列实现,尽管现在我看了它,我不确定整个队列是否保持优先级顺序。使用优先级队列 C++STL #include<q

您能否像队列一样设计一个数据结构,其中包含“入队列”、“出队列”、“最小值”和“最大值”? 我知道一种方法,可以让队列使用两个堆栈分别找到最小值和最大值,但是如何同时获得这两个值呢


感谢

数据结构是一种众所周知的结构,称为优先级队列。 队列中的每个元素都有一个相关的优先级,队列保持从高到低的排序顺序

队列中的每个元素都必须具有优先级,并且代码必须维护订单契约

一些STL包含优先级队列实现,尽管现在我看了它,我不确定整个队列是否保持优先级顺序。

使用优先级队列

C++STL

#include<queue>
#包括
通常,优先级队列是由二进制堆实现的。但它不能同时保持最大值和最小值@_@


也许平衡搜索树(如AVL、Splay或红黑树)应该是更好的选择。

使用标准容器,像a这样完全有序的数据结构将提供对极值的访问,例如使用和。如果您有多个具有相同优先级的对象,您可能希望以任意方式断开连接,或者使用一个

大多数实现可能会使用某种形式的方法来实现此类集合。由于数据结构将始终保持排序,可能比常规的单端数据结构更糟糕,但对于许多应用程序来说,差异并不重要,因此应避免实现自定义数据结构的工作。

通常使用某种类型的数据结构来实现。有一种称为a的变体,它允许恒定时间访问最大和最小元素。已经有了这样一个最小最大堆的C++实现。它的答案也应该对你有用


by首先提到了min-max堆,而by指出了堆栈溢出的实现问题。

在任何给定堆栈或队列中查找最小值和最大值都需要n的大O。这意味着您必须对堆栈进行完整的迭代。这可能有助于您走上正确的道路。不幸的是,我认为设置优先级队列是为了让您能够以较低的成本选择剩余的最高元素。大多数实现不允许您访问最低的元素。有关STL接口的描述,请参阅。最小-最大堆可以在恒定时间+1到@PaulDixon内访问最大和最小元素。一个普通的std::priority_队列在任何情况下都不会做他想做的事情。@PaulDixon,我建议把你的评论变成一个单独的答案。到目前为止,我们还没有一个答案,这表明它的正文中有最小-最大堆。