[英]Iterating vector-based priority_queue
我需要遍历基于std::vector
的priority_queue
。 正如这里的许多答案所暗示的,我可以从priority_queue
继承并访问底层容器(在我的例子中是std::vector
)。
是否保证priority_queue
元素从底层向量的元素0
开始存储并且向量大小等于队列大小?
PS。 无论优先级如何,我都在迭代,所以我迭代: for (int i = 0; i < c.size(); ++i)
...
简而言之,是的。
标准 [priqueue.members] 根据 push/emplace/pop_back 和堆操作定义了优先级队列上的运算符。 很容易看到底层容器的大小将等于优先级队列的大小,并且元素将从容器的开头开始存储。
事实上,该标准甚至保证底层容器将是标准make_heap
算法定义的堆。
也就是说,如果需要迭代,可能值得考虑priority_queue
是否是解决您的问题的最佳解决方案。
是的。
作为容器适配器库的一部分, priority_queue
的工作是提供现有容器的扩展/修改/限制接口。
底层容器实现为受保护成员c
。 .size .size()
是根据return c.size()
实现的,而 .top( .top()
是根据return c.front()
实现的。 [priqueue.overview]
类似地,构造、推送和弹出实际上与直接在底层c
上使用std::make_heap
、 push_heap
和pop_heap
相同。 [priqueue.cons] , [priqueue.members]
有关访问底层c
的方法的更多信息可以在这里找到: 有没有办法访问 STL 容器适配器的底层容器?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.