c ++中的优先级队列

时间:2017-01-27 22:57:26

标签: c++ iterator priority-queue

有没有办法在c ++中迭代优先级队列?我的理解是它们或多或少是不可变的,容器的唯一操作是顶层元素。我希望能够打印出优先级队列的内容,但不确定如何解决问题。

2 个答案:

答案 0 :(得分:6)

底层容器是名为protected的{​​{1}}数据成员(有关详细信息,请参阅here)。因此,您始终可以从c导出继承该容器上的几个迭代器(如果可用)。
作为一个最小的工作示例:

std::priority_queue

注意:通常不鼓励继承#include<queue> #include<iostream> struct MyPriorityQueue: std::priority_queue<int> { auto begin() const { return c.begin(); } auto end() const { return c.end(); } }; int main() { MyPriorityQueue pq; pq.push(0); pq.push(1); for(auto &v: pq) { std::cout << v << std::endl; } } 命名空间中的数据结构 话虽这么说,它至少起作用。

上面的代码适用于C ++ 14 下面是一个稍微修改过的版本,也可以在评论中的要求下在C ++ 11中使用:

std::

答案 1 :(得分:3)

根据@ skypjack的回答,这是一个模板版本:

fmt.Sprintf("%T", ID{})