C++priority_queue优先队列

 

优先队列 
他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队

优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序

定义:priority_queue<数据类型, 容器类型, 比较的方式>

容器类型:必须是用数组实现的容器,比如vector--默认,deque等,但不能用list。STL里面默认用的是vector

比较的方式:数据的优先级

std::greater   升序队列   最小值优先队列

std::less   降序队列   最大值优先队列--默认

复制代码
#include<iostream>
#include <queue>
#include  <vector>  

int main() {
    std::priority_queue <int, std::vector<int>, std::greater<int> > q;  //创建优先队列对象
    /*
    参数3:std::greater   升序队列   最小值优先队列
           std::less   降序队列   最大值优先队列
    */
    int i=10;
    q.push(i);
     i = 9;
    q.push(i);
     i = 100;
    q.push(i);
     i = 6;
    q.push(i);
     i = 50;
    q.push(i);

    int n = q.size();
    
    i = q.top();  //返回优先级最高元素,但不删除,( 在优先队列中,没有 front() 函数与 back() 函数 )
    std::cout << i << std::endl;
    
    std::cout << n << std::endl;

}
复制代码
 

复制代码
#include<iostream>
#include <utility>
#include  <vector>
#include <queue>

int main()
{

    //先按照pair的first元素降序;first元素相等时,再按照second元素降序:
    std::priority_queue<std::pair<int, int> >p;
    std::pair<int, int> a(3, 4);
    std::pair<int, int> b(3, 5);
    std::pair<int, int> c(4, 3);
    p.push(a);
    p.push(b);
    p.push(c);
    while (!p.empty())
    {
        std::cout << p.top().first << "\t" << p.top().second << std::endl;
        p.pop();
    }
    return 0;

}

 

 

 

 

 

 

 

 

posted @ 2020-10-17 15:25  天子骄龙  阅读(155)  评论(0编辑  收藏  举报