• c++STL系列之priority_queue(优先队列)


    开头总结:

    C++中STL的概念总结:

    1、容器 

    2、迭代器

    STL中所有的不同库都是容器的概念体现,基本操作都是基于迭代器的操作。

    一、优先队列概念

      优先队列和队列不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。优先队列拥有队列的基本操作。

    • q.size();//队列的大小
    • q.empty();//队列是否为空
    • q.push();//插入队尾元素
    • q.pop();//删除队头元素
    • q.front();//得到队头元素
    • q.back();//得到队尾元素

    二、头文件

    #include<queue>
    

    三、优先队列定义

    定义:priority_queue<Type, Container, Functional>
    Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。

    //升序队列
    priority_queue <int,vector<int>,greater<int> > q;
    //降序队列(默认为大根堆)
    priority_queue <int,vector<int>,less<int> >q;
    

    四、例子说明

    (1)比较队列为一维

    //对于基础类型 默认是大顶堆
    priority_queue<int> q; 
    //等同于 priority_queue<int, vector<int>, less<int> > q;
    for (int i = 0; i < 5; i++) 
        {
            q.push(i);
        }
    while (!q.empty()) 
        {
            cout << q.top() << ' ';
            q.pop();
        } 
    

    结果:4  3   2  1   0

    (2)比较队列为二维pair,pari的比较,先比较第一个元素,第一个相等比较第二个

        priority_queue<pair<int, int> > q;
        pair<int, int> b(1, 2);
        pair<int, int> c(1, 3);
        pair<int, int> d(2, 5);
        q.push(d);
        q.push(c);
        q.push(b);
        while (!q.empty()) 
        {
            cout << q.top().first << ' ' << q.top().second << '
    ';
            q.pop();
        }
    

    结果:

    2  5

    1  3

    1   2

  • 相关阅读:
    【CF720D】Slalom 扫描线+线段树
    【CF724F】Uniformly Branched Trees 动态规划
    【CF725G】Messages on a Tree 树链剖分+线段树
    【CF736D】Permutations 线性代数+高斯消元
    【CF799E】Aquarium decoration 线段树
    【CF739E】Gosha is hunting 贪心
    【CF744D】Hongcow Draws a Circle 二分+几何
    【BZOJ3774】最优选择 最小割
    【BZOJ2138】stone Hall定理+线段树
    【BZOJ4445】[Scoi2015]小凸想跑步 半平面交
  • 原文地址:https://www.cnblogs.com/wobushangwangl/p/14032366.html
Copyright © 2020-2023  润新知