C++ queue,stack用法总结

queue:

  • 相关头文件:
#include <queue>
#include <assert.h>
  • 先进先出

queue<int> q;

1、特殊位置表示

  • q.front();显示第一个元素
  • q.back();显示最后一个元素
  • q.push(val);入队
  • q.emplace(v1,v2,...);效果同push,但是根据相应类型自动构造。
  • q.pop();出队
  • q.empty();
  • q.size();

2、似乎就没有了......


priority_queue:
priority_queue< type, container, function >

优先队列,默认大的在前面,相当于大顶堆。

  • type:数据类型;
  • container:实现优先队列的底层容器;
  • function:元素之间的比较方式;
priority_queue<int,vector<int>,greater<int>> q;

上面这个队列,就是小的在前面了。

优先队列构造的后两个元素可以省略,对于container,必须是数组形式实现的容器,例如vector、deque,而不能使list。

优先队列除了把queue中q.front(),q.back()换成q.top()之外,与queue无异。但元素排列是按照元素值大小排序的。

priority_queue<pii,vector<pair<string,int>>,greater<pair<string,int>>> pq;
pq.push(make_pair("aaa",5));
pq.push(make_pair("aab",6));
pq.push(make_pair("aba",4));
pq.push(make_pair("aaa",5));
pq.push(make_pair("aaa",4));
pq.push(make_pair("aaa",6));
cout<<pq.top().first<<" "<< pq.top().second<<endl;

//aaa 4

另外可以自定义插入时的比较函数:

auto cmp = [](const pair<string, int>& a, const pair<string, int>& b) {
            return a.second == b.second ? a.first < b.first : a.second > b.second;
        };
        priority_queue< pair<string, int>, vector<pair<string, int>> , decltype(cmp) > que(cmp);

stack:

头文件:

#include <stack>

stack<int> s;

  • s.top();显示第一个元素
  • s.push(val);入栈
  • s.pop();出栈
  • s.empty();
  • s.size();
  • stack不可遍历;
  • s.emplace可以直接传入构造对象需要的元素,然后自己调用其构造函数;

    using PII = pair<int, int>;
    stack<PII> s;
    s.emplace(1,2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值