【发布时间】:2011-02-27 19:16:45
【问题描述】:
我有一个应用程序 (C++),我认为 STL priority_queue 会很好地为它服务。 The documentation 说:
Priority_queue 是一个容器适配器,这意味着它是在一些底层容器类型之上实现的。默认情况下,底层类型是矢量,但可以显式选择不同的类型。
和
优先队列是一个标准概念,可以通过多种不同的方式实现;此实现使用堆。
我之前假设top() 是O(1),而push() 将是O(logn)(我首先选择priority_queue 的两个原因)-但文档既不确认也不否认这一假设。
深入挖掘,序列概念的文档说:
单元素插入和擦除的复杂性取决于序列。
priority_queue 使用vector(默认)作为堆,其中:
...支持对元素的随机访问,在结尾处恒定时间插入和移除元素,在开头或中间支持线性时间插入和移除元素。
我推断,使用默认的priority_queue,top() 是O(1) 和push() 是O(n)。
问题 1:这是正确的吗? (top() 访问权限是O(1) 和push() 是O(n)?)
问题 2:如果我使用 set(或 multiset)而不是 vector 来实现priority_queue?这样做会有什么后果?其他操作会因此受到影响?
注:我担心的是时间效率,而不是空间。
【问题讨论】:
标签: c++ data-structures stl performance priority-queue