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