Kei*_*ith 6 c++ iterator priority-queue
有没有办法在c ++中迭代优先级队列?我的理解是它们或多或少是不可变的,容器的唯一操作是顶层元素.我希望能够打印出优先级队列的内容,但不确定如何解决问题.
底层容器是一个protected名为的数据成员c(有关详细信息,请参见此处).因此,您始终可以从a继承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;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:std::通常不鼓励从命名空间中的数据结构继承.
话虽如此,它至少起作用.
上面的代码适用于C++ 14.
下面是一个稍微修改过的版本,也可以在评论中的要求下在C++ 11中使用:
#include<queue>
#include<iostream>
struct MyPriorityQueue: std::priority_queue<int> {
decltype(c.begin()) begin() const { return c.begin(); }
decltype(c.end()) end() const { return c.end(); }
};
int main() {
MyPriorityQueue pq;
pq.push(0);
pq.push(1);
for(auto &v: pq) {
std::cout << v << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)