溫馨提示×

C++ PriorityQueue 能否自定義比較函數(shù)

c++
小樊
81
2024-10-14 18:29:08
欄目: 編程語言

是的,C++的PriorityQueue允許你自定義比較函數(shù)。你可以通過傳遞一個自定義的比較對象(也稱為仿函數(shù))給PriorityQueue的構(gòu)造函數(shù)來實(shí)現(xiàn)這一點(diǎn)。這個比較對象需要定義一個名為operator()的成員函數(shù),該函數(shù)接受兩個參數(shù)并返回一個布爾值,用于比較這兩個參數(shù)。

以下是一個使用自定義比較函數(shù)的PriorityQueue示例:

#include <iostream>
#include <queue>

// 自定義比較函數(shù)對象
struct Compare {
    bool operator()(int a, int b) {
        return a > b; // 降序排列
    }
};

int main() {
    // 使用自定義比較函數(shù)創(chuàng)建 PriorityQueue
    std::priority_queue<int, std::vector<int>, Compare> pq;

    // 向 PriorityQueue 中添加元素
    pq.push(5);
    pq.push(3);
    pq.push(8);
    pq.push(1);

    // 輸出 PriorityQueue 中的元素
    while (!pq.empty()) {
        std::cout << pq.top() << " ";
        pq.pop();
    }

    return 0;
}

在這個示例中,我們定義了一個名為Compare的結(jié)構(gòu)體,它重載了operator()函數(shù)以實(shí)現(xiàn)降序排列。然后,我們使用這個比較對象創(chuàng)建了一個PriorityQueue實(shí)例。注意,我們傳遞了一個std::vector<int>作為底層容器,因?yàn)?code>PriorityQueue默認(rèn)使用std::vector作為底層容器。

0