[英]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.