我有一个应用程序(C++),我认为 STL 可以很好地服务priority_queue
。 文档说:
Priority_queue 是一个容器适配器,这意味着它是在一些底层容器类型之上实现的。默认情况下,底层类型是矢量,但可以显式选择不同的类型。
和
优先级队列是一个标准概念,可以通过多种不同的方式实现;此实现使用堆。
我之前假设是,那将是一个top()
(我首先选择的两个原因) - 但文档既没有证实也没有否认这个假设。O(1)
push()
O(logn)
priority_queue
深入挖掘,序列概念的文档说:
单元素插入和擦除的复杂性取决于序列。
使用priority_queue
a vector
(默认情况下)作为堆,其中:
... 支持对元素的随机访问,在末尾的恒定时间插入和移除元素,以及在开始或中间的线性时间插入和移除元素。
我推断,使用默认priority_queue
的top()
isO(1)
和push()
is O(n)
。
问题1:这是正确的吗?(top()
访问是O(1)
和push()
是O(n)
?)
问题 2:如果我使用 a (or ) 而不是 a来实现 ,我能否O(logn)
提高效率?这样做会有什么后果?其他哪些操作会因此受到影响?push()
set
multiset
vector
priority_queue
注意:我在这里担心的是时间效率,而不是空间。