繁体   English   中英

迭代基于向量的priority_queue

[英]Iterating vector-based priority_queue

我需要遍历基于std::vectorpriority_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_heappush_heappop_heap相同。 [priqueue.cons] , [priqueue.members]


有关访问底层c的方法的更多信息可以在这里找到: 有没有办法访问 STL 容器适配器的底层容器?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM