簡體   English   中英

C++ priority_queue

[英]C++ priority_queue

我正在尋找如何在O(n)時間內構建一個堆,我使用Heapify找到了它。 但我想知道STL priority_queue是否也一樣? 所以我的問題是:

STL 中可用的priority_queue使用哪種構建堆的方法? 是使用可以將整個數組轉換為O(n)中的堆的 heapify,還是在堆中使用O(n log n)時間的元素一一插入?

我猜它是第二種方法,因為我們在使用 STL priority_queue時手動插入元素。 我對么?

std::make_heap(...) ,它一次接受整個 N 范圍來構建堆。

正如標准中所說,它具有O(N)復雜性。 例如你可以看到 CLang 是如何實現 std::make_heap 的, 源碼在這里

稍后您可以使用std::push_heapstd::pop_heapO(log N)時間內根據需要添加和取出 1 x 1 的元素。

同樣正如@Jarod42 所建議的,您可以只使用std::priority_queue ,因為它的構造函數之一接受具有 N 個元素的范圍(迭代器),這個構造函數也具有O(N)復雜性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM