【发布时间】:2012-04-25 21:03:17
【问题描述】:
由于std::priority_queue 和std::set(和std::multiset)都是存储元素并允许您以有序方式访问它们的数据容器,并且具有相同的插入复杂性O(log n),使用一个比另一个(或者,什么样的情况需要一个或另一个?)?
虽然我知道底层结构不同,但我对它们的实现差异并不感兴趣,而是比较它们的性能和适用性各种用途。
注意:我知道集合中的无重复项。这就是为什么我还提到了std::multiset,因为它具有与std::set 完全相同的行为,但可以在允许将存储的数据作为相等元素进行比较的情况下使用。所以请不要评论单/多键问题。
【问题讨论】:
-
优先级队列仅提供对最大元素的访问,而集合则为您提供所有元素的完整排序。这个较弱的接口意味着实现可能更高效(例如,您可以将实际队列数据存储在
vector中,由于其内存局部性,它可能具有更好的性能)。 -
@KerrekSB 最详尽的答案实际上是评论:D 根本没有人评论过性能。您能否将其放入答案中,也许可以扩展一点?
-
标准库的关键点是
priority_queue是根据heap*算法实现的,来自<algorithm>,应用于底层随机访问容器。 -
@KerrekSB 如果您将所有这些都放在答案中会很棒
标签: c++ algorithm sorting priority-queue