美文网首页
C++ 优先队列 std::priority_queue

C++ 优先队列 std::priority_queue

作者: random_walk | 来源:发表于2021-05-14 16:16 被阅读0次

    定义

    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;
    

    相关文章

      网友评论

          本文标题:C++ 优先队列 std::priority_queue

          本文链接:https://www.haomeiwen.com/subject/prvqjltx.html