我是STL容器(以及一般的C ++)的新手,所以我想我会联系社区寻求帮助。我基本上想要一个支持常量迭代的priority_queue
。现在,似乎std::priority_queue
不支持迭代,所以我将不得不使用其他东西,但我不确定究竟是什么。
要求:
一种选择是保留一个priority_queue
并单独拥有unordered_set
个引用,但我宁愿没有两个容器浮动。我也可以使用deque
并搜索正确的插入位置,但如果可能的话,我宁愿让容器为我管理排序(并且恒定时间插入将比线性时间更好)。有什么建议吗?
答案 0 :(得分:3)
有两种选择可以想到:
1)使用std::vector
和堆操作算法(请参阅堆操作 here)实现您自己的可迭代优先级队列。
2)从priority_queue
派生(私下)。这使您可以通过数据成员c
访问基础容器。然后,您可以在公共接口中公开迭代,随机访问和其他感兴趣的方法。
答案 1 :(得分:2)
使用std :: vector可能就像其他人已经指出的那样,但是如果你想要已经准备好的实现,可以使用Boost.Heap(这是一个包含多个优先级队列容器的库):http://www.boost.org/doc/libs/1_53_0/doc/html/heap.html
Boost是一个基本上完成标准库(不是很大)的库集合。许多C ++开发人员已经准备好在他们的开发计算机上使用它,以便在需要时使用它。在选择图书馆时要小心。
答案 2 :(得分:1)
您可以将(ordered)设置为队列。 set.begin()将是你的顶级元素,你可以通过erase(set.begin())弹出它。
答案 3 :(得分:1)
您是否观察过堆(std::make_heap)?它没有在队列内部排序,但具有您需要的优先级“从列表顶部弹出”。