前言
C++的map容器和multimap容器学习笔记
map中的所有元素都是对组。对组的第一个值称为键值key,用来索引;第二个值称为实值value,用来存元素
map和multimap属于关联式容器,在插入元素时会自动排序
map和multimap的数据结构是二叉树
map中不允许有重复键值,所以可以做去重操作
multimap中允许有重复键值
引入头文件
构造
空构造
1 2 3
| map<T, T> m;
multimap<T, T> m;
|
拷贝构造
1 2 3
| set<T, T> m(m);
multiset<T, T> m(m);
|
赋值
利用运算符重载赋值
容量和大小的操作
判断容器是否为空
获取元素的个数
增
插入对组
<key>
:元素的键
<value>
:元素的值
1 2 3 4 5
| m.insert(pair<T, T>(<key>, <value>));
m.insert(make_pair(<key>, <value>));
m.insert(map<T, T>::value_type(<key>, <value>));
|
利用运算符重载
插入默认数据
<key>
:元素的键
<value>
:元素的值
插入指定数据
<key>
:元素的键
<value>
:元素的值
删
删除迭代器位置的元素
<iterator>
:迭代器
删除一组元素
<iterator_start>
:开始位置迭代器
<iterator_end>
:结束位置迭代器
1
| m.erase(<iterator_start>, <iterator_end>);
|
删除容器中所有的元素
删除所有与指定元素键值相同的元素
<key>
:元素的键值
改
利用运算符重载
<key>
:元素的键
<value>
:元素的值
查
利用运算符重载
<key>
:元素的键
<value>
:元素的值
查找
获取指定元素是否存在
如果元素存在,返回该元素的迭代器
如果元素不存在,返回m.end()
<key>
:元素的键
1
| map<T, T>::iterator it = m.find(<key>);
|
统计
- 统计元素的个数
- 因为map的key不允许有重复元素,所以得到的结果只能是0或1。而multimap所得到的结果可能大于1
<key>
:元素的键
交换
排序
如果一个重载运算符的函数返回值类型为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; } };
map<T, T, Compare> m;
|
自定义类型
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; } };
map<T, T, Compare> m;
|
完成
参考文献
哔哩哔哩——黑马程序员