zoukankan      html  css  js  c++  java
  • STL--set

    set-概述:

      集合Set是一个容器,它其中所包含的元素的值是唯一的。集合中的元素按一定的顺序排列,并被作为集合中的实例。
    一个集合通过一个链表来组织,其具体实现采用了红黑树的平衡二叉树的数据结构。
    在插入操作和删除操作上比向量(Vector)快,但查找或添加末尾的元素时会有些慢。
     
     

    set c

    产生一个空的set/multiset,其中不含任何元素

    set   c (op)

    以op为排序准则,产生一个空的set/multiset

    set   c1(c2)

    产生某个set/multiset的副本,所有元素均被复制

    set   c (beg, end)

    以区间[beg;   end]内的元素产生一个set/multiset

    set   c (beg, end, op)

    以op为排序准则,利用[beg;   end]内的元素生成一个set/multiset

    c.~   set ()

    销毁所有元素,释放内存

     
     

    iterator begin()

    iterator end()

    返回指向第一个元素的迭代器

    返回指向末尾(最后一个元素之后)的迭代器

    void   clear()

    清空set容器

    bool   empty()

    如果为空返回true,否则返回false

    iterator   insert(TYPE &val   )

    插入一个元素,返回新元素的位置

    iterator   insert(iterator pos, TYPE &val)

    插入一个元素,返回插入元素的位置(pos是一个提示,指出插入操作的搜寻起点。如果提示恰当,可大大加快速度)

    void   insert(input_iterator   start, input_iterator   end )

    插入[start,   end)之间的元素到容器中

    void   erase(iterator pos)

    void   erase(iterator start, iterator end)

    size_type   erase(const   TYPE &val)

    删除pos所指元素

    删除[start,   end)之间的元素

    删除值为val的元素并返回被删除元素的个数

    size_type   count(const   TYPE &val)

    查找容器中值为val的元素的个数

    iterator   find(const   TYPE &val)

    返回一个迭代器指向键值为val的元素,如果没有找到就返回end()

    size_type   size()

    返回元素的数量

    void   swap(set &object)

    交换两个链表中的元素

     
     
     
    题目练习:
    (会陆续添加)
    这个题先看一下不用STL的解法:
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    using namespace std;
    
    char *a[10000];
    char b[10000];
        
    int main()
    {
        while (gets(b) && b[0] !='#')
        {
            int flag = 0;
            char *p = b;
            int i = 0;
            int num = 0;
            memset(a, 0 ,sizeof(a));
            while ( (a[i] = strtok(p, " ")) != NULL)
            {
                i ++;
                p = NULL;
            }
            for (int j = 0; j<i; j++)
            {
                num = 0;
                for (int k = j+1; k<i; k++)
                {
                    if (strcmp(a[j],a[k]) == 0)
                        num++;
                }
                if (num != 0)
                    flag ++;
            }
            cout << i-flag<< endl;
        }
        return 0;
    }
    View Code

    有人用map解的:

    #include<map>
    #include<string>
    #include<iostream>
    
    using namespace std;
    
    int main(){
        string s;
        map<string,int>Map;
        while(getline(cin,s)&&s!="#")
        {
            int a=0;
            string str;
            Map.clear();
            int len=s.length();
            for(int i=0;i<len;i++){
                if(s[i]=='#')
                    break;
                str.clear();
                while(s[i]>='a'&&s[i]<='z'){
                    str+=s[i];
                    i++;
                    a=1;
                }
                if(a==1)
                {
                    Map[str]++;
                    a=0;
                }
            }
            int ans=Map.size();
            cout<<ans<<endl;
        }
        return 0;
    }
    View Code

    不过, 草滩小恪感觉此题还是用set切, 切的更清晰, 更爽些!

    #include<iostream>
    #include<string>
    #include<sstream>
    #include<set>
    using namespace std;
    
    const int MAXN = 100000;
    
    char line[MAXN];
    
    int main()
    {
        set<string>s;
        while(cin.getline(line, MAXN))
        {
            if(line[0]=='#') break;
            s.clear();
            stringstream ss(line);
            string str;
            while(ss>>str)
            s.insert(str);
            cout<<s.size()<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    IEnumerable<T>转DataTable的几种方法
    关于IAsyncResult接口的CompletedSynchronously属性
    为WCF增加UDP绑定(储备篇)
    WPF自定义集合控件概述与遇到的问题
    WPF嵌套模板引发的血案
    为WCF增加UDP绑定(实践篇)
    Uva 10557 XYZZY(DFS+BFS)
    Uva 572 Oil Deposits(DFS)
    Uva 532 Dungeon Master(三维迷宫)
    Uva 10004 Bicoloring
  • 原文地址:https://www.cnblogs.com/acm1314/p/4540613.html
Copyright © 2011-2022 走看看