• STL-set 容器以及迭代器的简单理解


    先说下set的基本操作和时间复杂度

    begin()        ,返回set容器的第一个元素

    end()      ,返回set容器的最后一个元素

    clear()          ,删除set容器中的所有的元素

    empty()    ,判断set容器是否为空

    max_size()   ,返回set容器可能包含的元素最大个数

    size()      ,返回当前set容器中的元素个数

    find()             , 如果找到返回其位置,找不到返回end()

    其中插入和find的时间复杂多是O(logn)

    再说下迭代器的用法 iterator是指针的一种泛化 http://www.daxueit.com/article/3101.html 这里有详细的介绍

    下面给出一个实验代码 用来测试find 以及iterator的指向作用 *it表示访问it表示的实体

    set<int> s;
    int a,b,c;
    cin>>a>>b>>c;
    s.insert(a);
    s.insert(b);
    s.insert(c);
    set<int>::iterator it;
    it=s.find(b);
    cout<<*it<<endl;

    这里给出一个用set容器的题目

    l2-005 集合相似度

    给定两个整数集合,它们的相似度定义为:Nc/Nt*100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。

    输入格式:

    输入第一行给出一个正整数N(<=50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(<=104),是集合中元素的个数;然后跟M个[0, 109]区间内的整数。

    之后一行给出一个正整数K(<=2000),随后K行,每行对应一对需要计算相似度的集合的编号(集合从1到N编号)。数字间以空格分隔。

    输出格式:

    对每一对需要计算的集合,在一行中输出它们的相似度,为保留小数点后2位的百分比数字。

    输入样例:

    3
    3 99 87 101
    4 87 101 5 87
    7 99 101 18 5 135 18 99
    2
    1 2
    1 3
    

    输出样例:

    50.00%
    33.33%

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<set>
    using namespace std;
    set<int> s[55];
    void f(int x,int y)
    {
        int ret=0;
        set<int>::iterator it;//
        for(it=s[x].begin();it!=s[x].end();it++)
        {
            if(s[y].find(*it)!=s[y].end()) ret++;
           // if(s[y].count(*it)==0) ret++;
        }
        int sum=s[x].size()+s[y].size();
        int nc=ret,nt=sum-ret;
        double temp=(nc*1.0)/(nt*1.0);
        printf("%.2lf",temp*100);
        cout<<'%'<<endkl;
    }
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) s[i].clear();
        for(int i=1;i<=n;i++)
        {
           int len;
           cin>>len;
           while(len--)
           {
               int x;
               cin>>x;
               s[i].insert(x);
           }
        }
        int k;
        cin>>k;
        while(k--)
        {
            int x,y;
            cin>>x>>y;
            f(x,y);
        }
        return 0;
    }


    路漫漫其修远兮,吾将上下而求索
  • 相关阅读:
    Spring 事务管理
    016 sleep,wait,yield,join区别
    013 GC机制
    011 CountDownLatch,CyclicBarrier和Semaphore
    012 public等关键字可见性
    010 JVM类加载
    009 JVM内存结构以及GC机制
    008 BlockingQueue理解
    python3 正则表达式
    python django
  • 原文地址:https://www.cnblogs.com/z1141000271/p/6550367.html
Copyright © 2020-2023  润新知