集合:

集合是由元素组成的一个类,其成员可以是一个集合,也可以是一个原子,通常一个元素在一个集合中不能多次出现;由于对实现集合不是很理解,只简单写下已有的STL中的set集合使用;

C++中set基本运算及操作:

begin():返回指向第一个元素的迭代器

clear():清除所有元素;

empty():判断集合是否为空,若为空,返回true;

end():返回指向最后一个元素的迭代器;

size():返回集合中元素的数目;

lower_bound():返回指向大等于某值的第一个元素的迭代器;

set_union():合并两个集合;

set_intersection():两个集合的交集;

set_difference():前面集合对后面集合的差集;

合并集合:

调用代码:
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<set>
  6. using namespace std;
  7. struct Stu
  8. {
  9. int ID;
  10. int val;
  11. };
  12. struct cmp
  13. {
  14. bool operator()(const Stu& t1, const Stu& t2)
  15. {
  16. if (t1.val<t2.val)return true;
  17. else if (t1.val == t2.val)
  18. {
  19. if (t1.ID<t2.ID)return true;
  20. }
  21. else return false;
  22. }
  23. };
  24. int main()
  25. {
  26. set<Stu, cmp>s1;
  27. set<int>s2;
  28. set<int>s3;
  29. set<int>uni;
  30. set<int>inter;
  31. set<int>dif;
  32. Stu stu1, stu2, stu3;
  33. stu1.val = 80; stu2.val = 85; stu3.val = 85;
  34. stu1.ID = 31602114; stu2.ID = 31602113; stu3.ID = 31602115;
  35. s1.insert(stu1); s1.insert(stu2); s1.insert(stu3);
  36. s2.insert(10); s2.insert(13); s2.insert(54); s2.insert(7);
  37. s3.insert(1);s3.insert(12);s3.insert(54);s3.insert(13);
  38. printf("整型数据输出:\n");
  39. set<int>::iterator int_iter;
  40. set<Stu, cmp>::iterator Stu_iter;
  41. for (int_iter = s2.begin(); int_iter != s2.end(); int_iter++)
  42. printf("%d ", *int_iter);
  43. printf("\n\n");
  44. printf("自定义数据输出:\n");
  45. for (Stu_iter = s1.begin(); Stu_iter != s1.end(); Stu_iter++)
  46. printf("学号:%d 成绩:%d\n", Stu_iter->ID, Stu_iter->val);
  47. printf("\n\n");
  48. printf("并集,交集,差集函数使用:\n");
  49. set<int>::iterator s;
  50. set_union(s2.begin(),s2.end(),s3.begin(),s3.end(),inserter(uni,uni.begin())); //s2与s3的并集 ,放入到uni中了 ;
  51. set_intersection(s2.begin(),s2.end(),s3.begin(),s3.end(),inserter(inter,inter.begin())); //s2与s3的交集 ,放入到inter中了;
  52. set_difference(s2.begin(),s2.end(),s3.begin(),s3.end(),inserter(dif,dif.begin())); //s2对s3的差集 ,放入到dif中了;
  53. for(s=uni.begin();s!=uni.end();s++)
  54. printf("%d,",*s);
  55. printf("\n");
  56. for(s=inter.begin();s!=inter.end();s++)
  57. printf("%d,",*s);
  58. printf("\n");
  59. for(s=dif.begin();s!=dif.end();s++)
  60. printf("%d,",*s);
  61. printf("\n");
  62. return 0;
  63. }

这里讲到lower_bound就简要写一下lower_bound的使用:假设存在一个数组num[]:5,16,19,75,94,101;位置变量pos;

pos=lower_bound(num,num+6,15);

即pos返回的是第一个比15大等的元素的位置,此时pos=1;

pos=lower_bound(num,num+6,110);

pos是返回第一个比110大等的元素的位置,若不存在,则返回最右端元素的下一位下标,即size;此时pos=6;

lower_bound的核心思想:使用二分法对元素进行查找;

大致实现源代码:
  1. //这个算法中,first是最终要返回的位置
  2. int lower_bound(int *array, int size, int key)
  3. {
  4. int first = 0, middle;
  5. int half, len;
  6. len = size;
  7. while(len > 0) {
  8. half = len >> 1;
  9. middle = first + half;
  10. if(array[middle] < key) {
  11. first = middle + 1;
  12. len = len-half-1; //在右边子序列中查找
  13. }
  14. else
  15. len = half; //在左边子序列(包含middle)中查找
  16. }
  17. return first;
  18. }

还有需要自己实现的集合代码没有学习,之后有空再补上吧;

STL的集合set的更多相关文章

  1. STL语法——集合:set 安迪的第一个字典(Andy's First Dictionary,UVa 10815)

    Description Andy, , has a dream - he wants to produce his very own dictionary. This is not an easy t ...

  2. C++ STL Set 集合

    前言 set是STL中的一种关联容器.集合具有无序性,互异性等特点.熟练使用STL中的set模板类,可以比较简单的解决一些编程问题. 关联容器:元素按照关键字来保存和访问,STL中的map,set就是 ...

  3. (转)C++ STL set() 集合

    set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实 ...

  4. 【STL】集合运算

    STL中有可以实现交集.并集.差集.对称差集的算法. 使用前需要包含头文件: #include <algorithm> 注:使用计算交集和并集的算法必须保证参与运算的两个集合有序!!! 交 ...

  5. STL&&用法集合

    .....STL是c++里很强势很好用的一系列容器(函数)之类的,之前一直不太会用,所以总是暴毙....想着快比赛了,是时候理一下这些东西了. -1.pair 存放两个基本元素的东西 定义方法: pa ...

  6. C++ STL set集合容器

    汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ #include ...

  7. stl的集合set——安迪的第一个字典(摘)

    set就是数学上的集合——每个元素最多只出现一次,和sort一样,自定义类型也可以构造set,但同样必须定义“小于”运算符 以下代码测试set中无重复元素 #include<iostream&g ...

  8. STL set集合用法总结(multiset)

    2017-08-20 15:21:31 writer:pprp set集合容器使用红黑树的平衡二叉树检索树,不会将重复键值插入,检索效率高 logn 检索使用中序遍历,所以可以将元素从小到大排列出来 ...

  9. 单词数 (STL set集合)

    单词数 Problem Description lily的好朋友xiaoou333近期非常空.他想了一件没有什么意义的事情.就是统计一篇文章里不同单词的总数.以下你的任务是帮助xiaoou333解决问 ...

随机推荐

  1. 调试大叔V2.1.0(2018.12.17)|http/s接口调试、数据分析程序员辅助开发神器

    2018.12.17 - 调试大叔 V2.1.0*升级http通讯协议版本,完美解决Set-Cookie引起的系列问题:*新增Content-Type编码格式参数,支持保存(解决模拟不同网站或手机请求 ...

  2. SAP查找用户的登录记录

    1.可以使用USR02中有个上次登陆日期和登陆时间. 2.用SE38跑下RSUSR200,输入用户名即可查询上次登陆日期 3.SU10可以查到

  3. python,使用枚举类,面向对象高级编程

    python #针对常量 #枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例. from enum import Enum Month = Enum('Month', ('J ...

  4. JavaWeb总结(九)

    过滤器 - 一个中间组件,用于拦截源数据和目的数据之间的消息 - 过滤二者之间传递的数据 Web应用上的过滤器 -驻留在Web服务器上的Web组件 -过滤从客户端传递到服务器端的请求和响应 单个过滤器 ...

  5. JavaWeb总结(四)

    使用Servlet发送服务器端响应信息 Servlet API中定义一个专门的接口类javax.servlet.http.HttpServletResponse用于创建HTTP响应,包括HTTP协议的 ...

  6. Codeforces 909E. Coprocessor (拓扑、模拟)

    题目链接: Coprocessor 题意: 给出n个待处理的事件(0 - n-1),再给出了n个标(0表示只能在主处理器中处理这个事件,1表示只能在副处理器中处理这个事件),处理器每次能处理多个任务. ...

  7. 解决Linux下编译.sh文件报错 unexpected operator Syntax error: word unexpected

    执行一个脚本  发现报语法错误,但是在其他机器上运行都没有问题 唯一的区别就是 一个是centos机器  报错的是ubuntu 网上搜索了一下 因为Ubuntu默认的sh是连接到dash的,又因为da ...

  8. Zabbix实战-简易教程--业务类

    一.需求 项目要求对线上服务器进行监控,包括服务器本身状态.进程相关数据.业务相关数据. 服务器本身状态可以通过基础模板即可获取数据(CPU.内存.网络.磁盘): 进程相关数据,前面也有相关文章专门监 ...

  9. Linux shell 编写(2)

    shell脚本中变量的定义和使用: 1.shell中变量名可以由字母,数字,下划线组成,但数字不能作为变量名的第一个字符. 2.通过赋值符号"="来定义一个变量 如:myname= ...

  10. sketch 相关论文

    sketch 相关论文 Sketch Simplification We present a novel technique to simplify sketch drawings based on ...