【set】
2016-05-16 00:47
302 查看
set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference)
并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset
强大功能一:
计算交集,并集,差;set<int>s3;
set<int>s4;
set<int>s5;
// 计算A n B,并存在s3中;
set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(s3,s3.begin()));
// 计算A u B,并存在s4中;
set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(s4,s4.begin()));
// 计算A - B,并存在s5中;
set_difference(a.begin(),a.end(),b.begin(),b.end(),inserter(s5,s5.begin()));
强大功能二:
begin() ,返回set容器的第一个元素end() ,返回set容器的最后一个元素
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空
max_size() ,返回set容器可能包含的元素最大个数
size() ,返回当前set容器中的元素个数
rbegin ,返回的值和end()相同
rend() ,返回的值和rbegin()相同
erase(iterator) ,删除定位器iterator指向的值
erase(first,second),删除定位器first和second之间的值
erase(key_value),删除键值key_value的值
count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。
equal_range() ,返回一对定位器,分别表示第一个大于或等于给定关键值的元素和 第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值。具体这个有什么用途我还没遇到过~~~
find() ,返回给定值值得定位器,如果没找到则返回end()。
insert(key_value); 将key_value插入到set中 ,返回值是pair<set<int>::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。
inset(first,second);将定位器first到second之间的元素插入到set中,返回值是void.
lower_bound(key_value) ,返回第一个大于等于key_value的定位器
upper_bound(key_value),返回最后一个大于等于key_value的定位器
相关文章推荐
- 城市线程练习题
- Entity Framework 复杂类型
- Entity Framework 数据生成选项DatabaseGenerated
- IntelliJ IDEA 概念记录
- Entity Framework 并发处理
- Android-Intent详解
- php - 时间操作
- 手机服务 取得电池电量信息
- 乱码问题
- EF Code First 学习笔记:关系
- 我在Adapter中使用holder时踩到的坑
- 数据结构之魔方程序
- 关于python字符串的处理
- python计算非内置数据类型占用内存
- android开发笔记之 AlarmManager(闹钟服务)
- KS-检验(Kolmogorov-Smirnov test) -- 检验数据是否符合某种分布
- Python 类(一)
- 再谈如何将android studio项目转换成eclipse
- C++11尝鲜:右值引用和转发型引用
- Win10应用商店、应用打不开或闪退的解决方法