《算法笔记》6.4 map详解-算法笔记64map详解

6.4 map详解

map翻译为映射,也是常用的STL容器。map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器),也就可以建立string类型到int类型的映射。
如果要使用map,需要添加头文件和命名空间。

#include<map>
using namespace std ;

1.map的定义

单独定义一个map

map<typename1 , typename2> mp ;

而如果将字符串映射到整型,只能是string而不能是char数组

map< string , int > mp ;

这是因为char数组作为数组,是不能作为键值的。

map的键和值也可以是STL容器。

map< set<int> ,string > mp ;

2. map容器的访问

map一般有两种访问方式:通过下标访问或通过迭代器访问。

(1)通过下标访问

和访问普通数组一样,对于一个定义为map<char, int> mp 的映射来说,就可以直接使用mp[‘c’]的方式来访问它对应的整数。map中的键是唯一的

(2)通过迭代器访问

map迭代器的定义和其他STL容器迭代器定义相同:

map< typename1 , typename2 >::iterator it ;

map迭代器的使用方式和其他STL容器的迭代器不用,因为map的每一对映射都有两个typename,这决定了必须通过一个it来同时访问键和值。事实上,map可以使用it->first来访问键,it->second来访问值

for( auto it = mp.begin() ; it != mp.end() ; it++ ){
	cout << it->first << " " << it->second << endl ;
}

接下来似乎发现了一个很有意思的现象:map会以键从小到大自动排序,这是由于map内部是使用红黑树实现的(set也是)

3.map常用函数实例解析

(1)find()

find(key)返回键为key的映射的迭代器,没找到时返回mp.end(),时间复杂度为O(logN)。

(2)erase()

erase()有两种用法:删除单个元素、删除一个区间内的所有元素。

  1. 删除单个元素。
  • 删除单个元素
    删除单个元素有两种方法:

    • mp.erase(it),it为迭代器,复杂度为O(1)。

      auto it = mp.find('b');
      mp.erase(it) ;
      
    • mp.erase(key),key为欲删除的映射的键,复杂度为O(logN)。

      mp.erase('c') ;
      
  1. 删除一个区间内的元素
    mp.erase(first , last),即[first , last)。

(3)size()

size()用来获得map中映射的个数,复杂度为O(1)。

(4)clear()

清空map中的所有元素,复杂度为O(N)

延伸

map的键和值是唯一的,而如果一个键需要对应多个值,就只能用multimap。另外,在C++11标准中还增加了unordered_map,以散列代替map内部的红黑树实现,使其可以用来处理映射而不按key排序的需求,速度比map快得多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值