1.关于set的概念  

  set   是STL中的集合。

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

2.set的常用函数

  set 与 vector具有类似的用法

  1. #include<set> //set 的头文件
  2.  
  3. set<int> s; //声明一个int型set变量,名为s 
  4.  
  5. s.empty() //判定 s 是否为空
  6.  
  7.   s.insert(1); //把数字1插入到s中
  8.  
  9.   s.clear(); //清空s
  10.  
  11.   s.erase(1); //假若s存在1,则删除1
  12.  
  13.   s.begin(); //返回s中第一个元素地址 所以 *s.begin()
  14.  
  15.   s.end(); //返回s中最后一个元素地址
  16. //这个特殊一点,返回的是s中最后一个元素的下一个元素
  17. //所以 *(--s.end())是s最后一个元素
  18.  
  19.   s.rbegin(); //rbegin可以看做逆向的第一个地址 相当于(--s.end()) 此处取的已经是s最后一个元素
  20.  
  21.   s.rend(); //rend可以看做逆向的最后一个地址 相当于 s.begin()
  22.  
  23.   s.count(1); //计算s中1出现的次数,而次数只存在0与1,所以可以借来查找是否存在1
  24.  
  25.   s.size(); //返回s中元素的个数
  26.  
  27.   s.max_size(); //s最大能存元素的数目
  28.  
  29.   s.find(2); //查找2
  30.  
  31.   set<int>::iterator iter; //迭代器

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

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

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

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

运行结果:

  

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

附上一道set的入门题:

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

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

AC代码:

  1. #include<iostream>
  2. #include<set>
  3. using namespace std;
  4. int main()
  5. {
  6. int n,m,x;
  7. set<int>s;
  8. set<int>::iterator it;
  9. while (cin>>n>>m){
  10. s.clear();
  11. for (int i=;i<n+m;i++){
  12. cin>>x;
  13. s.insert(x);
  14. }
  15. it=s.begin();
  16. int cnt=s.size();
  17. for (int i=;i<=cnt;i++){
  18. if (i==)
  19. cout<<*it;
  20. else
  21. cout<<" "<<*it;
  22. it++;
  23. }
  24. cout<<endl;
  25. }
  26. return ;
  27. }

C++ STL中的 Set的用法的更多相关文章

  1. STL中的Vector相关用法

    STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...

  2. 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理

    http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客   bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...

  3. [转] C++ STL中map.erase(it++)用法原理解析

    总结一下map::erase的正确用法. 首先看一下在循环中使用vector::erase时我习惯的用法: for(vector<int>::iterator it = vecInt.be ...

  4. (转载)C++STL中vector容器的用法

     vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vec ...

  5. STL中pair容器的用法

    1.定义pair容器 1 pair <int, int> p, p1; 2 //定义 [int,int] 型容器 //直接初始化了p的内容 pair<string,int>p( ...

  6. STL中栈stack的用法

    头文件: #include <stack> 建立一个栈stack < 类型 > s //例如 stack<int> s 加入一个新的元素s.push( a ) 询问 ...

  7. STL中队列queue的用法

    头文件:#include <queue> 建立一个队列queue < 类型 > q 加入一个新的元素q.push(a) 询问队首元素q.front() 弹出队首元素q.pop( ...

  8. STL中mem_fun和mem_fun_ref的用法

    例如:假设有如下的代码: class Employee { public: int DoSomething(){} } std::vector<Employee> Emps; 假设我们要调 ...

  9. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

随机推荐

  1. June 29th 2017 Week 26th Thursday

    Hope for the best, but prepare for the worst. 做最好的期望,做最坏的打算. Always remember that quotes about being ...

  2. 【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    转自:http://www.cnblogs.com/easy5weikai/p/3843131.html 关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/ ...

  3. 优秀 Java 程序员写代码的风格,不再留坑给别人

    往 期 精 彩 推 荐    [1]Java Web技术经验总结 [2]15个顶级Java多线程面试题及答案,快来看看吧 [3]面试官最喜欢问的十道java面试题 [4]从零讲JAVA ,给你一条清晰 ...

  4. JavaScript的DOM_操作内容

    一.innerText 属性 <script type="text/javascript"> window.onload = function(){ var box = ...

  5. log4j框架logger的继承关系以及使用场景

    log4j框架logger的继承关系以及使用场景 log4j日志框架logger是存在继承关系的,我们一般都会在log4j.properties文件中定义log4j.rootLogger.其他所有lo ...

  6. ThinkPHP3.2.3快速入门:基础篇

    一.安装 thinkphp无需安装,只需将从官网上下载的压缩包解压后,把所有文件放到localhost根目录里就行了 二.压缩包中文件简述 :应用程序文件夹.自己所写的文件都放在这个文件夹里面 :公用 ...

  7. C# 文件流FileStream 实现多媒体文件复制 StreamReader StreamWriter 读取写入文本

    #region 实现多媒体文件的复制 string source = @"F:\123\source.avi";//源文件路径 string target = @"F:\ ...

  8. openmax component类的继承关系

    向OpenCORE里继承一个新的codec时,需要用到OpenMAX接口规范对该codec进行封装,即要定义一个用于封装的类(wrapper),实现OpenMAX规定的集中核心方法(omx core  ...

  9. 小程序内嵌H5——判断小程序环境的坑

    现在各种小程序风靡,这边H5的需求还没有搞定,产品又要求做小程序版本,做可以,关键是618前上线,我-- whatever,618要做推广,日期订了,剩下的就只能是排期,定方案,尽可能完成. 最后和产 ...

  10. 5.同步关键字(synchronized)

    同步关键字(synchronized): 多线程给我们提供方便的时候,也给整个编程增加了难度,尤其是对临界资源的控制,尤为重要. 一个在操作系统课上,老掉牙的事例,就把这种情况解释的明明白白. 一对夫 ...