最小堆priority_queue

最小堆(Min Heap)是一種特殊的樹形數據結構,其中每個父節點的值都小於或等於其子節點的值。在C++的標準庫中,可以使用priority_queue來實現最小堆。

priority_queue是一個模板類,可以存儲任意類型的元素,但默認情況下,它按照元素的優先權進行排序。在最小堆中,元素的優先權由其值決定,因此默認情況下,priority_queue會按照從小到大的順序排列元素。

下面是一個使用priority_queue實現最小堆的示例代碼:

#include <iostream>
#include <queue>

int main() {
    std::priority_queue<int> minHeap; // 創建一個最小堆

    // 插入元素
    minHeap.push(3);
    minHeap.push(1);
    minHeap.push(4);
    minHeap.push(1); // 重複插入相同的元素,只會保留一個

    // 訪問堆頂元素(最小元素)
    std::cout << "Min element: " << minHeap.top() << std::endl; // 輸出1

    // 刪除堆頂元素
    minHeap.pop();

    // 訪問剩餘元素中的最小值
    if (!minHeap.empty()) {
        std::cout << "Remaining min element: " << minHeap.top() << std::endl; // 輸出3
    }

    return 0;
}

輸出結果:

Min element: 1
Remaining min element: 3

在這個示例中,我們使用priority_queue創建了一個最小堆,並插入了幾個整數。然後我們輸出了堆頂元素(最小元素)並刪除了它。最後,我們訪問了剩餘元素中的最小值。注意,由於我們重複插入了相同的元素,因此最終只保留了一個值。