STL容器系列文章:multimap容器

1. 头文件

#include <map>	// 和map容器一样

2. 定义

  • 用于存储多个键相同的键值对pair<const K, T>,底层红黑树RB Tree实现,具有自动排序功能
  • 类模板的定义:常用前两个参数,可能用到第三个参数设置是否升序排列,很少用到第四个参数
template <class Key,									// 键key类型
		  class T,										// 值value类型
		  class Compare = less<Key>,					// 指定排序规则,默认升序,按key排序
		  class Alloc = allocator<pair<const Key, T>>	// 指定分配器对象类型
		  > class multimap;
  • 和std::map的区别
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. 常用方法

  • multimap的方法基本都适用于map,但没有at()和[]访问

  • 容量

方法说明
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值