zoukankan      html  css  js  c++  java
  • STL--容器适配器(queue、priority_queue、stack)

    适配器(Adaptor)是提供接口映射的模板类。适配器基于其他类来实现新的功能,成员函数可以被添加、隐藏,也可合并以得到新的功能。
    STL提供了三个容器适配器:queue、priority_queue、stack。
    这些适配器都是包装了vector、list、deque中某个顺序容器的包装器。注意:适配器没有提供迭代器,也不能同时插入或删除多个元素。
     本文地址:http://www.cnblogs.com/archimedes/p/cpp-adapter.html,转载请注明源地址。

    队列(queue)

    先进先出(FIFO)的数据结构
    可供选择的容器只有deque和list。对大多数用途使用默认的deque。
    1、要用到头文件#include<queue>
    2、常用函数
    • queue<int> Q 声明一个int的空队列Q;
    • push() 将一个新元素接到队列的末端;
    • pop() 弹出队列中的第一个元素,返回的是一个void;
    • front() back() 存取队列中的第一个元素和最后一个元素,返回的是一个引用;
    • empty() 测试队列是否为空;
    • size() 获得队列中元素的个数;

    堆栈(stack)

    先进后出(FILO)的数据结构
    可以使用三个标准顺序容器vector、deque、list中的任何一个作为stack的底层模型。
    1、要用到头文件#include<stack>
    2、常用函数
    • stack<int> Q 声明一个int的空栈Q;
    • push() 将一个新元素接到栈的末端;
    • pop() 弹出栈中的末端元素,返回的是一个void;
    • top() 存取栈中的最后一个元素,返回的是一个引用;
    • empty() 测试栈是否为空;
    • size() 获得栈中元素的个数;
    <priority_queue> 内部实现: 堆
    priority_queue<T, Sequence, Compare>
    支持操作:
    push() O(logn)
    pop() O(logn)
    top() O(1)存取队列中的第一个元素,与queue不同
    See also: push_heap(), pop_heap() … in <algorithm>

    priority_queue用法举例

    #include <queue>
    #include <vector>
    using namespace std;
    priority_queue <int> maxheap;      //int最大堆
    struct cmp{
        bool operator()(int a,int b) 
        {return a > b;}
    };
    priority_queue <int,vector<int>,cmp> minheap;  //int最小堆

    priority_queue的比较函数

    优先级的比较函数,可以使用缺省默认,也可以重载自己编写的比较函数。
    1) 假设优先队列中的元素为结构体,要对其中某个变量排序。此时可以在结构体中重载操作符:
    priority_queue<int, vector<int>, cmp> Q;
    struct cmp{
            int seq;                //重载运算符号
            bool operator < (const Test &a) const {
                    return seq < a.seq;     // seq大的优先级高
            }
    };

    2)如果是根据与优先队列中某个元素相关的变量排序,且此变量不在结构体中,则可参考greater<int>() 的方式去重载(),具体做法如下:

    priority_queue<int, vector<int>, cmp> Q;
    struct cmp {
          bool operator()(int a, int b) { // d[a]小的优先级高
                  return d[a] > d[b];
            }
    };
  • 相关阅读:
    从构建分布式秒杀系统聊聊限流特技
    轻快的VIM(三):删除
    shell中各种括号的作用()、(())、[]、[[]]、{}
    java的重写规则
    UNIX命令,统计当前目录(含子目录)下所有后缀为.log的文件中ERROR出现的行数
    linux下使用 du查看某个文件或目录占用磁盘空间的大小
    linux如何查看系统占用磁盘空间最大的文件及让文件按大小排序
    管道命令和xargs的区别(经典解释)
    JAVA 一个或多个空格分割字符串
    shell替换一个或多个空格为逗号
  • 原文地址:https://www.cnblogs.com/wuyudong/p/cpp-adapter.html
Copyright © 2011-2022 走看看