以相反的顺序遍历现有的标准优先级队列
Posted
技术标签:
【中文标题】以相反的顺序遍历现有的标准优先级队列【英文标题】:Traverse existing std priority queue in reverse order 【发布时间】:2021-07-02 13:11:34 【问题描述】:我正在使用 std::priority 队列对象开发一个 c++ 项目。我希望在代码的某个点以相反的顺序(从底部到顶部)访问优先级队列,我天真的解决方案是将所有元素弹出一个新数组并以相反的顺序存储它们。 我想知道是否有更优化的方式以相反的顺序遍历优先级队列?
【问题讨论】:
priority_queue
使用的容器是 protected
,因此您可以扩展 priority_queue
类并使用它的容器做您想做的事情。
【参考方案1】:
std::priority_queue
不是容器,它是容器适配器。如果要观察元素,最好的方法是对其进行子类化并暴露底层容器的成员。
template<class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type>>
class my_priority_queue : std::priority_queue<T, Container, Compare>
using priority_queue::priority_queue;
typename Container::const_iterator begin() const return c.begin();
typename Container::const_iterator end() const return c.end();
typename Container::const_reverse_iterator rbegin() const return c.rbegin();
typename Container::const_reverse_iterator rend() const return c.rend();
;
【讨论】:
感谢@Caleth,但代码仍然存在编译问题,/tmp/lpaTtDhkeM.cpp:9:63: error: 'c' was not declared in this scope 9 |类型名 Container::const_iterator begin() const return c.begin();以上是关于以相反的顺序遍历现有的标准优先级队列的主要内容,如果未能解决你的问题,请参考以下文章