1
33
优先级队列适配器使用标准库堆算法来构建和访问队列——这是您应该在文档中查找的那些算法的复杂性。 top()操作显然是o(1),但您可能希望在调用堆后弹出(),根据 Josuttis )是O(2*log(n)),push()是O(log(n))-同一个源。 从C++标准,25.63.1,PuthHu堆:
罂粟堆:
|
2
5
不,这不正确。top()是O(1),push()是O(log n)。请阅读文档中的注释2,以了解此适配器不允许遍历向量。Neil关于pop()是正确的,但这仍然允许在O(log n)时间内处理堆进行插入和删除。 |
3
5
|
4
2
如果底层数据结构是堆,top()将是常量时间,push(edit:和pop)将是对数(如您所说)。向量只是用来存储如下内容:
堆:
矢量(用于存储) 1 2 3 3 8 12 11 9 你可以把它看作是我的孩子在(2i)和(2i+1)位置的元素。 他们使用向量是因为它按顺序存储数据(这比离散存储更高效,缓存更友好) 不管它是如何存储的,都应该始终实现一个堆(尤其是由制造std lib的上帝),这样pop是常量,push是对数的。 |
5
2
数据结构中的C++ STL优先级队列是堆数据结构(堆是一个基于完全二叉树的非线性ADT),完全二叉树是通过向量(或数组)容器实现的。
|
6
1
问题1:我看的不是标准,而是Afaik,使用
Q2:
|
Julia · 矢量中相加为总和S的值的数量 1 年前 |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
quantumwell · 将空向量放入std::map() 6 年前 |
OutOfBound · 对未初始化内存使用算法的优点 6 年前 |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 6 年前 |