STL可迭代容器,如priority_queue

STL iterable container like priority_queue

本文关键字:priority queue 迭代 STL      更新时间:2023-10-16

我是STL容器(和c++)的新手,所以我想我应该向社区寻求帮助。我想要一个支持常数迭代的priority_queue。现在,std::priority_queue似乎不支持迭代,所以我将不得不使用其他东西,但我不确定确切是什么。

要求:

  • 在插入时保持顺序(类似于优先级队列)
  • 从列表顶部弹出
  • 获取对列表中每个元素的const访问权限(在此阶段不关心队列中的顺序)

一种选择是保留一个priority_queue,并单独拥有一个unordered_set的引用,但我不希望有两个容器浮动。我也可以使用deque并搜索正确的插入位置,但如果可能的话,我宁愿让容器为我管理排序(并且恒定时间插入将比线性时间更好)。有什么建议吗?

我想到了两个选项:

1)使用std::vector和堆操作算法实现自己的可迭代优先级队列(参见堆操作)。

2) private from priority_queue。这使您可以通过数据成员c访问底层容器。然后可以在公共接口中公开迭代、随机访问和其他感兴趣的方法。

使用std::vector可能就像其他人已经指出的那样足够了,但是如果您想要已经准备好的实现,也许可以使用Boost。堆(这是一个具有多个优先级队列容器的库):http://www.boost.org/doc/libs/1_53_0/doc/html/heap.html

Boost是一个库的集合,基本上完成了标准库(不是很大)。许多c++开发人员在他们的开发计算机上已经准备好了boost,以便在需要时使用它。只是在选择库时要小心。

您可以使用(ordered) set作为队列。Set.begin()将是你的顶部元素,你可以通过erase(Set.begin())弹出它。

您观察过堆(std::make_heap)吗?它在队列内部没有顺序,但有你需要的优先级"pop from top of list"