1. 头文件
#include <map>
2. 定义
- 用于存储多个键相同的键值对pair<const K, T>,底层红黑树RB Tree实现,具有自动排序功能
- 类模板的定义:常用前两个参数,可能用到第三个参数设置是否升序排列,很少用到第四个参数
template <class Key,
class T,
class Compare = less<Key>,
class Alloc = allocator<pair<const Key, T>>
> class multimap;
(1)multimap的键key可以重复(insert_equal),map不可以(insert_unique)
(2)multimap没有提供at()操作方法,也没有重载[]操作符。毕竟同一个key可能有多个value
3. 对象创建
方法 | 说明 |
---|
multimap<string, string> myMap; | 创建一个空的multimap容器 |
multimap<string, string> myMap{{“ab”, “a is a boy”}, {“b”, “b is a begger”}}; | 创建并初始化,该方式相同于把每一个{key, value}创建为pair类型,再初始化multimap |
multimap<string, string> myMap(yourMap); | 拷贝构造/复制构造函数 |
multimap<string, string> myMap(iterator first, iterator last); | 拷贝一个迭代器范围元素 |
multimap<char, int, greater<char>> myMap{{‘a’, 1}, {‘b’, 2}, {‘c’,3}}; | 默认升序排列,即less,这里指定降序排列:<c, 3>, <b, 2>, <a, 1> |
4. 常用方法
方法 | 说明 |
---|
myMap.size(); | 容器中存储的键值对个数 |
myMap.max_size(); | 容器中所能容纳的最大键值对个数,不同OS不一样 |
myMap.empty(); | 容器是否为空,是返回true,否则返回false |
方法 | 说明 |
---|
myMap.insert(pair<type1, type2>(key, value)) | pair方式插入 |
myMap.insert(make_pair(key, value)) | make方式插入 |
myMap.insert({key, value}) | 直接插入 |
myMap.insert(pos, {key, value}) | 在pos之前插入元素,返回新插入元素的迭代器 |
myMap.insert(iterator first, iterator last) | 插入迭代器区间元素 |
方法 | 说明 |
---|
erase(const Key& key); | 如 erase(1); 删除以1为key的所有元素 |
erase(iterator); | 删除迭代器所指元素 |
erase(iterator first, iterator last); | 删除迭代器区间[first, last)内的元素 |
clear(); | 相当于erase(map.begin(), map.end()); |
方法 | 说明 |
---|
myMap.find(key); | 返回首个键为key的键值对迭代器,失败返回end() |
myMap.count(key); | 查找键为key的键值对的个数,不同于map和set的count,返回值可能大于1 |
myMap.lower_bound(key); | 返回第一个不小于键key的键值对的个数 |
myMap.upper_bound(key); | 返回第一个大于key的键值对的个数 |
myMap.equal_range(key); | 返回一个pair对象。pair.first和lower_bound返回值等价,pair.second和upper_bound的返回值等价 |
方法 | 说明 |
---|
begin()/end() | 正向迭代器 |
rbegin()/rend() | 反向迭代器 |
cbegin()/cend() | const正向迭代器 |
crbegin()/crend() | const反向迭代器 |
参考文章:
multimap常用方法
map容器的用法
created by shuaixio, 2021.06.18