c++stl之队列 栈 与优先队列

栈:

栈是先入后出,后入先出

有push()和pop()两种操作   使用时定义是stack<int> s;  top()操作是取栈顶的元素  但是不去删除

在集合计算机的问题中的一段code、解释:  if (IDcache.cout(x)) return IDcache[x]  、、 是如若找到集合x就返回他的id

 队列

队列是 先如先出的 就像通道 

定义是 queue<int>s push()  pop()   进行入队和出队的操作  front ()是取队首的操纵

STL的优先队列也是和队列同头文件件   定义是      priority_queue<int>s;实现

例如:   实现一个个数位大的优先级反而小的队列

     priority_queue<int,vector<int>,cmp>PQ   CMP的定义

    实现优先队列这个越小越大的队列

priority_queue<LL,vector<LL>,greater<LL>pq;  

看丑数问题

//丑数是一个正整数,其素数因子只有2,3,5. 例如,6,8是丑数 (因为6 = 2*3, 8=2*2*2),而14不是丑数(14=2*7)因为其素数因子包含7.

//注意:1是一个特例,也将其看做一个素数
#include<iostream>
#include<vector>
#include<set>
#include<queue>
using namespace std;
typedef long  long LL;//定义long long 类型的别名
const int coeff[3]={2,3,5};//定义基础数组
int main(){
    priority_queue<LL,vector<LL>,greater<LL> > pq;//定义优先队列这个是越小的整数优先级越大的优先队列
    set<LL> s;//定义集合 排重
    pq.push(1);//进入队列
    s.insert(1);//插入集合
    for(int i=1;;i++){

        LL x=pq.top();//获取到队列第一个元素(因为是按最小优先的原则排序的)
        pq.pop();//第一元素出队列 所以 第1500个丑数就是pop1499后的那个元素
        if(i==1500){
            cout<<"The 1500'th ugly number is "<<x<<".\n";//输出第1500个丑数
            break;//跳出循环
        }
        for(int j=0;j<3;j++){
            LL x2=x*coeff[j];//x2是2 3 5的倍数
            //判断集合中有没有x2 若没有进入if中
            if(!s.count(x2)){
                s.insert(x2);//插入到s集合中
                pq.push(x2);//进队列
            }
        }
    }
    return 0;
}
在此题的解析中使用集合set  也可用sort从新paixu和队列queue排序的使用



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值