STL之map常见用法详解

摘自胡凡的《算法笔记》,仅作记录用!
前言:

  • map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)
  • 如果要使用map,则需要添加map头文件,即#include<map>,除此之外,还需要添加using namespace std;

一、map的定义

  1. 单独定义一个map,可以使用map<typename1,typename2> mp;map和其他STL容器在定义上有点不一样,因为map需要确定映射前类型(键key)和映射后类型(值value),所以需要在<>内填写两个类型,其中第一个是键的类型,第二个是值的类型
  • 如果是字符串到整型的映射,必须使用string而不能用char数组。
  • map的键和值也可以是STL容器。

二、map容器内元素的访问

  1. 通过下标访问
  • 和访问普通的数组是一样的,例如对一个定义为map<char,int> mp的map来说,就可以使用mp[‘c’]的方式来访问它对应的整数。
  • 值得注意的是,map中的键是唯一的
  1. 通过迭代器访问
  • map迭代器的定义和其他STL容器迭代器定义的方式相同
  • map<typename1,typename2>::iterator it;typename1和typename2就是定义map时填写的类型,这样就得到了迭代器it
  • map迭代器的使用方式和其他STL容器的迭代器不同,因为map的每一对映射都有两个typename,这决定了必须能通过一个it来同时访问键和值。事实上,map可以使用it->first来访问键,使用it->second来访问值。
  • map会以键从小到大的顺序自动排序,因为其内部是使用红黑树实现的。

三、map常用函数

  1. find(),时间复杂度为 O ( N ) O\left(N\right) O(N)
  • find(key)返回键为key的映射的迭代器
  1. erase()有两种用法:
  • 删除单个元素有两种方法:一是mp.erase(it),it为所需要删除元素的迭代器,时间复杂度为 O ( 1 ) O\left(1\right) O(1)。二是mp.erase(key),key为欲删除的映射的键,时间复杂度为 O ( N ) O\left(N\right) O(N)
  • mp.erase(first,last)可以删除一个区间内的所有元素,其中first为所需要删除区间的起始迭代器,而last为所需要删除区间的末尾迭代器的下一个地址,也即为删除[first,last)。时间复杂度为 O ( l a s t − f i r s t ) O(last−first) O(lastfirst)
  1. size()用来获得map中映射的对数,时间复杂度为 O ( 1 ) O\left(1\right) O(1)
  2. clear()用来清空map中的所有元素,时间复杂度为 O ( N ) O\left(N\right) O(N)

四、map的常见用途

  1. 需要建立字符(或字符串)与整数之间映射的题目,使用map可以减少代码量。
  2. 判断大整数或者其他类型数据是否存在的题目,可以把map当bool数组用。
  3. 字符串和字符串的映射有时候也可能会遇到。
  4. map的键和值是唯一的,而如果一个键需要对应多个值,就只能用multimap。另外,C++ 11标准中还增加了unordered_map,以散列代替map内部的红黑树实现,使其可以用来处理只映射而不按key排序的需求,速度比map要快得多。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值