Использование функции сравнения в очереди приоритетов в C++: методы и примеры

Чтобы использовать функцию сравнения в очереди приоритетов в C++, вам необходимо определить специальную функцию сравнения или использовать лямбда-функцию. Функция сравнения определяет порядок, в котором элементы сохраняются и извлекаются из приоритетной очереди на основе определенных критериев.

Вот несколько способов использования функции сравнения в очереди с приоритетом:

Метод 1: определение пользовательской функции сравнения

#include <iostream>
#include <queue>
// Custom comparison function
struct Compare {
    bool operator()(int a, int b) {
        // Define the comparison logic here
        return a > b; // Example: Elements with smaller values have higher priority
    }
};
int main() {
    std::priority_queue<int, std::vector<int>, Compare> pq; // Use the custom comparison function
    // Insert elements into the priority queue
    pq.push(5);
    pq.push(2);
    pq.push(8);
    // Retrieve elements from the priority queue
    while (!pq.empty()) {
        std::cout << pq.top() << " ";
        pq.pop();
    }
    return 0;
}

Метод 2. Использование лямбда-функции

#include <iostream>
#include <queue>
int main() {
    // Use a lambda function as the comparison function
    std::priority_queue<int, std::vector<int>, decltype([](int a, int b) { return a > b; })> pq;
    // Insert elements into the priority queue
    pq.push(5);
    pq.push(2);
    pq.push(8);
    // Retrieve elements from the priority queue
    while (!pq.empty()) {
        std::cout << pq.top() << " ";
        pq.pop();
    }
    return 0;
}

В обоих методах вы можете изменить логику сравнения внутри пользовательской функции сравнения или лямбда-функции в соответствии с вашими требованиями. В примерах показано поведение минимальной кучи, при котором элементы с меньшими значениями имеют более высокий приоритет.