• 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()--返回一个用于比较元素间的值的函数
  • 相关阅读:
    c#泛型的使用
    关于Asp.net无法写入输出文件的原因
    利用OLEDB导出数据到Excel
    中秋祝福
    C#获取当前域用户名
    【程序员必读】骨灰级程序员20条编程经验
    SQL SERVER 2005无法远程连接的问题
    ASP.Net 实现伪静态方法及意义
    js+ajax获取文件大小
    C#遍历指定文件夹中的所有文件
  • 原文地址:https://www.cnblogs.com/Never-mind/p/7630738.html
Copyright © 2020-2023  润新知