【笔记】C++的map容器

前言

C++的map容器和multimap容器学习笔记
map中的所有元素都是对组。对组的第一个值称为键值key,用来索引;第二个值称为实值value,用来存元素
map和multimap属于关联式容器,在插入元素时会自动排序
map和multimap的数据结构是二叉树
map中不允许有重复键值,所以可以做去重操作
multimap中允许有重复键值

引入头文件

1
#include <map>

构造

空构造

1
2
3
map<T, T> m;

multimap<T, T> m;

拷贝构造

1
2
3
set<T, T> m(m);

multiset<T, T> m(m);

赋值

利用运算符重载赋值

1
m = m;

容量和大小的操作

判断容器是否为空

1
m.empty();

获取元素的个数

1
m.size();

插入对组

<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>:元素的值

1
m[<key>];

插入指定数据

<key>:元素的键
<value>:元素的值

1
m[<key>] = <value>;

删除迭代器位置的元素

  • 返回下一个元素的位置

<iterator>:迭代器

1
m.erase(<iterator>);

删除一组元素

  • 返回下一个元素的位置

<iterator_start>:开始位置迭代器
<iterator_end>:结束位置迭代器

1
m.erase(<iterator_start>, <iterator_end>);

删除容器中所有的元素

1
m.clear();

删除所有与指定元素键值相同的元素

<key>:元素的键值

1
s.erase(<key>);

利用运算符重载

<key>:元素的键
<value>:元素的值

1
m[<key>] = <value>;

利用运算符重载

<key>:元素的键
<value>:元素的值

1
m[<key>];

查找

  • 获取指定元素是否存在

  • 如果元素存在,返回该元素的迭代器

  • 如果元素不存在,返回m.end()

<key>:元素的键

1
map<T, T>::iterator it = m.find(<key>);

统计

  • 统计元素的个数
  • 因为map的key不允许有重复元素,所以得到的结果只能是0或1。而multimap所得到的结果可能大于1

<key>:元素的键

1
s.count(<key>);

交换

  • 容器内数据的互换
1
m.swap(m);

排序

  • 修改map容器的排序规则,实现降序排列

如果一个重载运算符的函数返回值类型为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容器时,指定自定义的排序规则
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;
}
};

// 在创建set容器时,指定自定义的排序规则
map<T, T, Compare> m;

完成

参考文献

哔哩哔哩——黑马程序员