集合类简介
- 集合让程序员能在容器中快速的查找键(键:存储在一维容器中的值)
- set和multiset之间的区别就是set中的值唯一,multiset中的值可以不唯一。
- 为实现快速搜索,集合的内部结构像二叉树,插入数据时对其进行排序。
#include <set>
实例化
以set为例,multiset同样
1 set setA;2 setsetB;3 set setC(setA);4 set setD(setB.cbegin(),setB.cend());
插入元素
1 setA.insert(-1);2 setB.insert(setA.cbegin(),setA.cend());
查找元素
查找第一个与给定值匹配的元素
1 auto iElementFound = setA.find(-1);
删除元素
成员函数erase(),通过键删除值,相同的元素全部删除
1 setA.erase(-1);2 setA.erase(setA.cbegin(),setA.cend());
set和multiset的优缺点
对需要频繁查找的应用程序来说,STL set和multiset很有优势,因为其内容是经过排序的,因此查找速度更快。然而,为提供这种优势,容器在插入元素时进行排序。因此,插入元素时有额外开销,因为需要对元素进行排序——如果应用程序将频繁使用find()等函数,则这种开销是值得的。
STL散列集合实现std::unordered_set和std::unordered_multiset
- #include <unordered_set>
- 插入和排序时间固定
- 有一个负责确定排列顺序的散列函数
1 unordered_set usetA;2 auto HFn = usetA.hash_function();
其他
set::size()指出容器包含多少个元素。
multiset::count(value)确定有多少个元素包含特定的值。