• 【set】poj 3481 Double Queue


      首先呢,这是一道set裸题。

      其实介绍这道题最大的目的其实是为了熟悉set的用法。只要学会set的基础用法,这道题自然迎刃而解了啊。(超菜的啊


     set基础操作

    • 作为队列的一种,自然有插入q.insert(x) ->x是插入元素,q是队列名称。还有删除操作 q.erase(x);

                        --当然这题就会这些就够了啊。毕竟这是一道真·水题

    • begin() 返回指向第一个元素的迭代器
    • clear() 清除所有元素
    • count() 返回某个值元素的个数
    • empty() 如果集合为空,返回true(真)
    • end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
    • find() 返回一个指向被查找到元素的迭代器
    • max_size() 返回集合能容纳的元素的最大限值
    • size() 集合中元素的数目
    • swap() 交换两个集合变量

     -->set这种队列,是一种自带排序的队列。所以在使用结构体作为插入元素时,一定要重载运算符。还有,set中是没有重复元素的。一定要注意啊。


    最后代码一波带走本题AC

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<set>
    using namespace std;
    struct ss{
        int k,p;
        bool operator < (const ss &a) const{
            if(p==a.p) return k<a.k;
            return p<a.p;
        }
    }a;
    set<ss>sl;
    int main()
    {
        //freopen("1.txt","r",stdin);
        int n;
        while(scanf("%d",&n)==1) {
            if(n==1) {
                scanf("%d%d",&a.k,&a.p);
                sl.insert(a);
            }
            if(n==3) {
                if(sl.empty()) printf("0
    ");
                else {
                    a=*(sl.begin());
                    printf("%d
    ",a.k);
                    sl.erase(a); 
                }
            }
            if(n==2) {
                if(sl.empty()) printf("0
    ");
                else {
                    a=*(--sl.end());
                    printf("%d
    ",a.k);
                    sl.erase(a);
                }
            }
            if(n==0) return 0;
        }
        return 0; 
    }

    双手奉上数据。

    Input

    2
    1 20 14
    1 30 3
    2
    1 10 99
    3
    2
    2
    0

    Output

    0
    20
    30
    10
    0

     本题结束。


    但是,set可不止这样-->  set还支持集合中的并集,交集,差集和补集    -->(划重点!

    1. 并集:
    2. std::set_union() 

      交集:

      std::set_intersection()
    3. 差集:
      std::set_difference()
    4. 补集(这是个玄学,反正我理解不了怎么实现的):
      std::set_symmetric_difference():这个是第一个迭代器于第二个的差集 然后再 并上第二个相对于第一个的差集 

    还有什么的话,想到再补充啦。(当然如果你是高端人士的话有基础,可以自行参考这篇博客:stl-set   我是从这里学的....QAQ)

    那么就这样啦。谢谢。

    ---OI是信仰,是真正应该被认真以待的东西.....!
  • 相关阅读:
    Leetcode53_Spiral_Matrix
    leetcode 分类
    bash 脚本
    关闭占用端口
    blue bossa
    判断对称二叉树
    This server is in the failed servers list: localhost/127.0.0.1:16000 启动hbase api调用错误
    在cikuapi.com上抓取相关词
    那些天使用AWS填过的坑和注意事项
    一百个人的十年-读后感
  • 原文地址:https://www.cnblogs.com/qxyzili--24/p/10430551.html
Copyright © 2020-2023  润新知