簡體   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