STL容器Set和Multisets使用
来源:互联网 发布:网络安全员日常工作 编辑:程序博客网 时间:2024/05/22 14:52
STL容器Set和Multisets使用
简介
set和multiset会根据特定的排序准则,自动将元素排序。两者不同指出是multisets允许元素重复而sets不允许。它们通常都是以平衡二叉树实现的。
注意:由于set和multiset是自动排序的,故不能直接改变元素值,因为这样会打乱原本正确的顺序。故要改变元素值,必须先删除旧元素,再插入新元素。其提供的接口反映了这种行为:
sets和multisets不提供用来直接存取元素的任何操作函数
通过迭代器进行元素简介存取,有一个限制:从迭代器角度看,元素值是常数。
操作函数
- 构造析构函数
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():销毁所有元素,释放内存
set< Elem >:一个set,与less\<>(operator<)为排序准则
set< Elem, Op >:一个set,以op为排序准则
multiset< Elem >:一个multiset,以less<>(operator<)为排序准则
multiset< Elem, Op >:一个multiset,以op为排序准则
- 非变动性操作
c.size():返回容器的大小
c.empty():判断容器大小是否为令。等同于size()==0,但可能更快
c.max_size():返回可容纳的最大元素数量
c1 == c2:判断是否c1等于c2
c1 != c2:判断是否c1不等于c2。等同于!(c1==c2)
c1 < c2:判断是否c1小于c2
c1 > c2:判断是否c1大于c2。等同于c2 < c1
c1 <= c2:判断是否c1小于等于c2。等同于!(c2 < c1)
c2 <= c1:判断是否c1大于等于c2。等同于!(c1 < c2)
- 搜寻操作
count(elem):返回“元素值为elem”的元素个数
find(elem):返回“元素值为elem”的第一个元素,如果找不到就返回end()
lower_bound(elem):返回elem的第一个可安插位置,也就是“元素值>=elem”的第一个元素位置
upper_bound(elem):返回elem的最后一个可安插位置,也就是“元素值>elem”的第一个元素位置
equal_range(elem):返回elem可安插的第一个位置和最后一个位置,即“元素值==elem”的元素区间
- 赋值操作
c1 = c2:将c2中所有元素赋值给c1
c1.swap(c2):将c1和c2的元素互换
swap(c1, c2):将c1和c2的元素互换。此为全局函数
- 迭代器相关操作
c.begin():返回一个双向迭代器(将元素视为常数),指向第一个元素
c.end():返回一个双向迭代器(将元素视为常数),指向最后元素的下一个位置
c.rbegin():返回一个逆向迭代器,指向逆向遍历时的第一个元素
c.rend():返回一个逆向迭代器,指向逆向遍历时的最后元素的下一个位置
- 插入和删除操作
c.insert(elem):安插一份elem副本,返回新元素位置(不论是否成功——对sets而言)
c.insert(pos, elem):安插一份elem副本,返回新元素位置(pos是个提示,指出安插操作的搜寻起点。如果提示恰当,可大大加快速度)
c.insert(beg, end):将区间[begin; end]内所有元素的副本安插到c(无返回值)
c.erase(elem):移除“与elem相等”的所有元素,返回被移除的元素个数
c.erase(pos):移除迭代器pos所指位置上的元素,无返回值
c.erase(beg, end):移除区间[beg; end]内的所有元素,无返回值
c.clear():移除全部元素,将整个容器清空
- 异常处理
sets和multisets是以节点为基础的容器。如果节点构造失败,容器仍保持原样。由于析构函数通常不抛出异常,所以节点的移除不可能失败。而对于多重元素安插操作,“保持元素次序”这一条件会造成“异常抛出时能够完全复原”这一需求变得不切实际。故只有“单一元素安插操作”才支持“成功,否则无效”的操作原则。至于“多元素删除操作”总是能够成功。如果排序准则之复制/赋值操作会抛出异常,则swap()也会抛出异常。
**参考文献:**STL源码分析,C++标准库
- STL容器Set和Multisets使用
- STL容器使用DEMO-set
- C++ STL容器 set使用
- STL容器Set的使用
- stl-容器set和multiset
- STL容器Set和Multiset
- C++STL练习<queue> <set>容器使用
- STL — set容器的使用详解
- 32STL之Set和multiset容器
- STL容器 -map和set接口介绍
- STL之Set和multiset容器
- STL之Set和multiset容器
- C++STL中的set容器和map容器
- STL容器之set
- STL关联容器--Set
- STL容器:set,multiset
- STL中set容器
- STL中的set容器
- hibernate 多对一注解
- windows下如何下载并安装Python 3.5.1
- PHP中如何使用socket进行通信?
- 标签的使用(四):表单标签的使用汇总
- phpstorm配置xdebug(win)
- STL容器Set和Multisets使用
- layout资源文件重用
- 至今为止最全的Android面试题(一)
- SparkMLlib---LinearRegression(线性回归)、LogisticRegression(逻辑回归)
- 手机管理器之自动挂断黑名单的来电(六十四)
- 反射(reflaction)的用法介绍
- 伯努利数应用
- DrySister看妹子应用(第一版)——2.解析后台数据
- KMP(MP)算法详解