【发布时间】:2021-12-08 18:40:39
【问题描述】:
documentation for std::priority_queue 将push 操作的复杂性表述为:
比较的对数加上
Container::push_back的复杂度。
并且默认使用std::vector 作为底层容器。但是,push_back 只能将元素推送到向量的末尾,而在优先级队列中,可能需要在向量中间的某个位置添加元素,在这种情况下,必须将后面的所有元素都向右移动。在最坏的情况下,在开始添加元素时,推送操作将产生全部 O(n) 成本。那么优先级队列是如何在对数时间内做到的呢?为什么它默认使用向量而不是诸如堆之类的“简单插入和查找”容器?
【问题讨论】:
标签: c++ time-complexity priority-queue