欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C++ priority_queue 优先级队列构造大根堆和小根堆

最编程 2024-10-04 19:35:32
...

priority_queue的三个参数

template <class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type>>
class priority_queue;

1、元素类型
2、底层容器类型,默认vector
3、比较函数(传入的是一个类型):小根堆greater<T>大根堆less<T>

常用于求解 数组中第K个最大元素(复杂度O(n)),前K个高频元素 等问题。

例如,求数组中第K个最大元素的三种写法:

class Solution {
public:
    class mycompare{
        public:
            bool operator()(const int& left, const int& right){
                return left < right;
            }
    };
    static bool mycompare2(const int& left, const int& right) {
        return left < right;
    }

    int findKthLargest(vector<int>& nums, int k) {
        //优先队列:大根堆解法(根节点大于子节点)
        priority_queue<int, vector<int>, mycompare> pq;
        priority_queue<int, vector<int>, decltype(&mycompare2)> pq(mycompare2);
        priority_queue<int, vector<int>, less<int>> pq;
        for (int i = 0; i < nums.size(); i++) {
            pq.push(nums[i]);
        }
        for (int i = 0; i < k-1; i++){
            pq.pop();
        }
        return pq.top();
    }
};