容器适配器(队列、优先队列、栈)

容器适配器(队列、优先队列、栈)

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

        队列(queue)
        先进先出(FIFO)的数据结构
        可供选择的容器只有dequeue和list。对大多数用途使用默认的dequeue。
        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> 内部实现: 堆
        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的比较函数
        优先级的比较函数,可以使用缺省默认,也可以 重载自己编写的比较函数。
        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];
                }
        };



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值