zoukankan      html  css  js  c++  java
  • STL使用————SET&MULTISET

    SET函数的基本用法 by hhl

    使用set的好处

    1. 当增加元素后,集合会自动删重并从小到大排列(时间比快排还快)
    2. 相当于一棵伸展树(能快速求出后继)


    使用基础

    #include<set>
    set <数据类型(int,long long,double,bool..)> 名称(A,B,C,D...);
    set <数据类型(int,long long,double,bool..)> :: iterator it;

    例题

    题目:输入n个数,输出一个无重复从小到大的集合。
    输入:第一行输入n,第二行输入n个数(a[1],a[2]….a[n])
    输出:无重复从小到大的集合
    代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<set>
    using namespace std;
    set <int> S;
    set <int> :: iterator it;
    int a[110];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        S.clear();
        for(int i=1;i<=n;i++) S.insert(i);
        for(it=S.begin();it!=S.end();it++)//从集合的开始到末尾输出
        {
            printf("%d
    ",*it);
        }
        return 0;
    }

    **noi 1.10 09:明明的随机数**

    【传送门:noi 1.10 09

    代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<set>
    using namespace std;
    set <int> S;
    set <int> :: iterator it;
    int a[110];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        S.clear();
        for(int i=1;i<=n;i++) S.insert(a[i]);
        printf("%d
    ",S.size());
        for(it=S.begin();it!=S.end();it++)//从集合的开始到末尾输出
        {
            printf("%d ",*it);
        }
        return 0;
    }

    **HDU1412: {A} + {B}**

    【传送门:HDU1412

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<set>
    using namespace std;
    set <int> S;
    set <int> :: iterator it;
    set <int> :: iterator it1;
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            S.clear();
            for(int i=1;i<=n+m;i++)
            {
                int x;
                scanf("%d",&x);
                S.insert(x);
            }
            it1=S.end();
            it1--;
            for(it=S.begin();it!=it1;it++)
            {
                printf("%d ",*it);
            }
            printf("%d
    ",*it);
        }
        return 0;
    }

    不删重set函数:multiset

    multiset与set的区别就是不会删重,但是依旧会从小到大排列
    set中使用的函数在multiset同样适用


    使用基础

    #include<set>
    multiset <数据类型(int,long long,double,bool..)> 名称(A,B,C,D...);
    multiset <数据类型(int,long long,double,bool..)> :: iterator it;

    使用函数

    SET MULTISET 常用函数
    使用:S.函数名()
    begin()--返回指向第一个元素的迭代器
    clear()--清除所有元素
    count()--返回某个值元素的个数
    empty()--如果集合为空,返回true
    end()--返回指向最后一个元素的迭代器
    equal_range()--返回集合中与给定值相等的上下限的两个迭代
    erase()--删除集合中的元素
    find()--返回一个指向被查找到元素的迭代器
    get_allocator()--返回集合的分配器
    insert()--在集合中插入元素
    lower_bound()--返回指向大于(或等于)某值的第一个元素的
    key_comp()--返回一个用于元素间值比较的函数
    max_size()--返回集合能容纳的元素的最大限值
    rbegin()--返回指向集合中最后一个元素的反向迭代器
    rend()--返回指向集合中第一个元素的反向迭代器
    size()--集合中元素的数目
    swap()--交换两个集合变量
    upper_bound()--返回大于某个值元素的迭代器
    value_comp()--返回一个用于比较元素间的值的函数
  • 相关阅读:
    CI 知识 :Git介绍及常用操作
    虚拟机的迁移(热迁移)
    kvm虚拟化网络管理
    Zabbix -----安装
    Mariadb 主从
    keepalived + lvs marster 与 backup 之间的 高可用
    LVS 负载均衡 (VS/DR模式 与 VS/TUN 模式)
    linux下部署tomcat 上线jpress博客系统
    docker (2)---存储、网络(利用docker容器上线静态网站)
    openstack(2) -------RabbitMQ集群部署
  • 原文地址:https://www.cnblogs.com/Never-mind/p/7630738.html
Copyright © 2011-2022 走看看