C++ 优先队列 std::priority_queue

2021-05-14  本文已影响0人  random_walk

定义

template<
    class T,
    class Container = [std::vector](http://en.cppreference.com/w/cpp/container/vector)<T>,
    class Compare = [std::less](http://en.cppreference.com/w/cpp/utility/functional/less)<typename Container::value_type>
> class priority_queue;

提供常数时间的最优先元素的查找(当为int时,默认为最大),对数代价的插入与弹出。
第一个参数,表示优先队列中元素的类型,eg,int和vector,各元素类型应该相同。
第二个参数,表示怎么去存储第一个参数中的元素,满足一定条件,一般为vector和deque
第三个参数,比较各个元素之间的关系,第一实参先于第二实参,则返回true,否则返回 false,默认是std::less即小于为真,则优先级更低,(满足更低)

自定义比较函数

lambda函数

auto cmp = [](vector<int> a, vector<int> b) { return a[0] * a[0] + a[1] * a[1] > b[0] * b[0] + b[1] * b[1]; };
priority_queue< vector<int>, vector<vector<int>>, decltype(cmp) > pq(cmp);

类或结构体

struct cmp{
        bool operator()(vector<int> a, vector<int> b){ 
                     return a[0] * a[0] + a[1] * a[1] > b[0] * b[0] + b[1] * b[1]; 
                }
        };
 priority_queue< vector<int>, vector<vector<int>>, cmp > pq;
上一篇 下一篇

猜你喜欢

热点阅读