【问题标题】:Traverse existing std priority queue in reverse order以相反的顺序遍历现有的标准优先级队列
【发布时间】:2021-07-02 13:11:34
【问题描述】:

我正在使用 std::priority 队列对象开发一个 c++ 项目。我希望在代码的某个点以相反的顺序(从底部到顶部)访问优先级队列,我天真的解决方案是将所有元素弹出一个新数组并以相反的顺序存储它们。 我想知道是否有更优化的方式以相反的顺序遍历优先级队列?

【问题讨论】:

  • priority_queue 使用的容器是 protected,因此您可以扩展 priority_queue 类并使用它的容器做您想做的事情。

标签: c++ std 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(); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多