ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ 优先队列(priority_queue)用法

2021-12-24 20:02:57  阅读:167  来源: 互联网

标签:std priority nums C++ queue print data


A priority queue is a container adaptor that provides constant time lookup of the largest (by default) element, at the expense of logarithmic insertion and extraction.

 优先队列作为一种常用的容器,可以提供极值的快速查找功能。插入和抽取操作的消耗都是对数级别的。

优先队列也可以看作是最大堆或者最小堆的具体实现,所以该数据结构自带的top(), pop()可以类比于堆结构。

用法模板

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

 这里的compare是比较函数,可以根据需求选取不同的自带的比较函数,也可以根据自己的需求编写比较函数。

这里可以先看一个priority_queue的应用例子

template<typename T>
void print_queue(T q) { // NB: pass by value so the print uses a copy
    while(!q.empty()) {
        std::cout << q.top() << ' ';
        q.pop();
    }
    std::cout << '\n';
}
 
int main() {
    std::priority_queue<int> q;
 
    const auto data = {1,8,5,6,3,4,0,9,7,2};
 
    for(int n : data)
        q.push(n);
 
    print_queue(q);
 
    std::priority_queue<int, std::vector<int>, std::greater<int>>
        q2(data.begin(), data.end());
 
    print_queue(q2);
 
    // Using lambda to compare elements.
    auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1); };
    std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);
 
    for(int n : data)
        q3.push(n);
 
    print_queue(q3);
}

 运行以后的输出是:

9 8 7 6 5 4 3 2 1 0 
0 1 2 3 4 5 6 7 8 9 
8 9 6 7 4 5 2 3 0 1

根据compare结果,会将比较后的winner放在队列的最后。

这个与sort函数刚好相反

class Solution {
public:
    void print_queue(vector<int>& q) { // NB: pass by value so the print uses a copy
        for(auto & ele : q){
            std::cout<<ele<<' ';
        }
        std::cout << '\n';
    }

    vector<int> sortArray(vector<int>& nums) {
        sort(nums.begin(), nums.end(), less());
        print_queue(nums);

        sort(nums.begin(), nums.end(), greater());
        print_queue(nums);
    
        return nums;        
    }
};

输出:

0 1 2 3 4 5 6 7 8 9 
9 8 7 6 5 4 3 2 1 0 

可以看出sort函数输出的结果会将winnter置于数组的最前端,这里在使用的时候需要注意。

标签:std,priority,nums,C++,queue,print,data
来源: https://blog.csdn.net/hanjibingyan/article/details/122122139

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有