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

时间:2012-09-17 03:12:55

标签: c++ data-structures stl queue

你能设计一个数据结构就像一个包含'enqueue','dequeue'''minimum'和'maximum'的队列? 我知道一种使用2个堆栈来分别查找最小值和最大值的队列的方法,但是如何同时获取两个?

由于

4 个答案:

答案 0 :(得分:3)

使用标准容器,像std::set这样的完全有序的数据结构将提供对两个极值的访问,例如使用*s.begin()*s.rbegin()。如果您有多个具有相同优先级的对象,您可能希望以任意方式断开关系,或者使用std::multiset代替。

大多数实现可能会使用某种形式的red-black tree来实现这样的集合。由于数据结构将始终保持排序状态,asymptotic performance可能比基于heap的常规priority queue给出的更差,但对于许多应用程序而言,差异不大这很重要,因此应该避免实现自定义数据结构的工作。

答案 1 :(得分:1)

使用优先级队列!

C ++ STL

#include<queue>

通常,优先级队列由Binary-Heap实现。但它不能同时保持最大值和最小值。 @ _ @

也许平衡搜索树,比如AVL,Splay或Red-Black Tree应该是更好的选择。

答案 2 :(得分:1)

通常使用某种priority queue来实现heap structure。有一种名为min-max heap的变体允许对最大和最小元素进行恒定时间访问。已经有a question要求C ++实现这样的最小 - 最大堆。它的答案也应该对你有用。

<{3>} This comment首先提到了最小 - 最大堆,而Paul Dixonthis comment指出了堆栈溢出的实现问题。 < / p>

答案 3 :(得分:0)

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

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

有些STL包含优先级队列实现,但现在我看一下,我不确定整个队列是否按优先级顺序排列。