zoukankan      html  css  js  c++  java
  • C++ STL中的 Set的用法

    1.关于set的概念  

      set   是STL中的集合。

      集合我们都很熟悉,具有排异性,在这里set中也遵循这条规矩。 而且在set中,存在系统自动排序的操作。

    2.set的常用函数

      set 与 vector具有类似的用法

    #include<set>       //set 的头文件 
    
        set<int> s;        //声明一个int型set变量,名为s 
    
        s.empty()       //判定 s 是否为空 
    
      s.insert(1);       //把数字1插入到s中 
    
      s.clear();        //清空s 
    
      s.erase(1);        //假若s存在1,则删除1 
    
      s.begin();        //返回s中第一个元素地址  所以 *s.begin() 
    
      s.end();        //返回s中最后一个元素地址  
                        //这个特殊一点,返回的是s中最后一个元素的下一个元素 
                        //所以  *(--s.end())是s最后一个元素 
    
      s.rbegin();        //rbegin可以看做逆向的第一个地址   相当于(--s.end())  此处取的已经是s最后一个元素 
    
      s.rend();        //rend可以看做逆向的最后一个地址  相当于 s.begin() 
    
      s.count(1);        //计算s中1出现的次数,而次数只存在0与1,所以可以借来查找是否存在1 
    
      s.size();        //返回s中元素的个数 
    
      s.max_size();    //s最大能存元素的数目 
    
      s.find(2);        //查找2 
    
      set<int>::iterator iter;    //迭代器 

    erase(iterator)  ,删除定位器iterator指向的值

    erase(first,second),删除定位器first和second之间的值

    erase(key_value),删除键值key_value的值

    //lower_bound(key_value) ,返回第一个大于等于key_value的定位器
    //upper_bound(key_value), 返回最后一个大于等于key_value的定位器
    #include <iostream> #include <set> using namespace std; int main() { set<int> s; s.insert(1); s.insert(3); s.insert(4); cout<<*s.lower_bound(2)<<endl; cout<<*s.lower_bound(3)<<endl; cout<<*s.upper_bound(3)<<endl; return 0; }

    运行结果:

      

      小结:set中的操作是不进行任何的错误检查的,比如定位器的是否合法等等,所以用的时候自己一定要注意。

    附上一道set的入门题:

      hdu 1412  {A} + {B}    http://acm.hdu.edu.cn/showproblem.php?pid=1412

    Problem Description
    给你两个集合,要求{A} + {B}.
    注:同一个集合中不会有两个相同的元素.
     
    
    Input
    每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
     
    
    Output
    针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.
     
    
    Sample Input
    1 2
    1
    2 3
    1 2
    1
    1 2
     
    
    Sample Output
    1 2 3
    1 2

    AC代码:

    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {
        int n,m,x;
        set<int>s;
        set<int>::iterator it;
        while (cin>>n>>m){
            s.clear();
            for (int i=0;i<n+m;i++){
                cin>>x;
                s.insert(x);
            }
            it=s.begin();
            int cnt=s.size();
            for (int i=1;i<=cnt;i++){
                if (i==1)
                    cout<<*it;
                else 
                    cout<<" "<<*it;
                it++;
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    理解Java中字符流与字节流的区别
    程序员常见面试问题(不定期更新)
    软链接 硬链接
    《大数据时代》读后的思考
    mysql——int(size) 中的size表示什么意思
    Access denied for user ''@'localhost' to
    Effective c++——条款03:尽可能使用const
    http——wireshark抓包分析
    vim——vim配置步骤
    正则表达式和通配符
  • 原文地址:https://www.cnblogs.com/q1204675546/p/9954253.html
Copyright © 2011-2022 走看看