前言
C++的set容器与multiset容器学习笔记
set和multiset属于关联式容器,在插入元素时会自动排序
set和multiset的数据结构是二叉树
set中不允许有重复元素,所以可以做去重操作
multiset中允许有重复元素
引入头文件
构造
空构造
1 2 3
| set<T> s;
multiset<T> s;
|
拷贝构造
1 2 3
| set<T> s(s);
multiset<T> s(s);
|
赋值
利用运算符重载赋值
容量和大小的操作
判断容器是否为空
获取元素的个数
增
在容器中插入数据(set)
<element>
:元素
1 2 3
| s.insert(<element>);
pair<set<T>::iterator, bool> p = s.insert(<element>);
|
在容器中插入数据(multiset)
<element>
:元素
1 2 3
| s.insert(<element>);
iterator it = s.insert(<element>);
|
删
删除迭代器位置的元素
<iterator>
:迭代器
删除一组元素
<iterator_start>
:开始位置迭代器
<iterator_end>
:结束位置迭代器
1
| s.erase(<iterator_start>, <iterator_end>);
|
删除容器中所有的元素
删除所有与指定元素相同的元素
<element>
:元素
查找
获取指定元素是否存在
如果元素存在,返回该元素的迭代器
如果元素不存在,返回s.end()
1
| set<T>::iterator it = s.find(<element>);
|
统计
- 统计元素的个数
- 因为set不允许有重复元素,所以得到的结果只能是0或1。而multiset所得到的结果可能大于1
交换
排序
如果一个重载运算符的函数返回值类型为bool,权限是public,重载的运算符是小括号,那么这个函数被称为仿函数
内置类型
1 2 3 4 5 6 7 8 9 10 11 12
| class Compare { public: bool operator()(T t1, T t2) { return t1 > t2; } };
set<T, Compare> s;
|
自定义类型
1 2 3 4 5 6 7 8 9 10 11 12
| class Compare { public: bool operator()(const T & t1, const T & t2) { return t1 > t2; } };
set<T, Compare> s;
|
完成
参考文献
哔哩哔哩——黑马程序员