#C07L07P01. C07.L07.STL之映射.概述

C07.L07.STL之映射.概述

map翻译为映射,是STL中的常用容器。

其实,数组就是一种映射,比如:int a[100];就是定义了一个int到int的映射。而 a[5]=25 ; 就是把 5 映射到25。

数组总是将 int 类型映射到其它基本类型(称为数组的基类型),这同时也带来了一个问题,有时候我们希望把 string 映射成一个 int ,数组就不方便了。

img

这时就可以使用map,map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。

img

一、map 的用途至少有以下三种情形:

  1. 需要建立字符(串)与整数之间的映射。

  2. 可以用大整数做下标,来实现数组计数。

  3. 字符串与字符串之间的映射。

二、定义map的方法

  1. 必须先添加map头文件,即 #include <map>; (用万能头文件也可以),同时必须要有 using namespace std;

  2. 定义一个map的方法为:map<typename1,typename2> name;

其中,typename1是映射前的类型(键key),typename2是映射后的类型(值value),name为映射的名字。

例如:普通int数组a就是 map<int,int> a; 。而如果是字符串到整型的映射,就使用string和int建立映射,即 map<string,int> a;

三、使用map的方法

  1. map 的访问

    访问 map 的元素有两种方式,一种是通过下标访问;另一种是通过迭代器访问。
    

(1)、用下标访问

通过下标访问就像普通的数组元素访问。

例如:定义了map<char,int> mp, 那么:就可以直接访问 mp['c'] , 如 mp['c']=124;

(2)、通过迭代器访问,通常遍历整个映射时,会用到它。

例如:定义了 map< char , int > mp,且做了多次操作后,输出所有的值。

例如

mp['c']=124, mp['t']=100,  mp['c']=200;

map<char,int>::iterator it; //定义迭代器变量 it

for(it=mp.begin(), it !=mp.end(), it++)  //用迭代器来输出映射的内容
	cout<<it->first<<':'<<it->second<<endl;
	
  1. Map 使用方法总结:

map<key_type,value_type>name;//普通的定义

map<string,int>::iterator it; //定义映射类型的迭代器。

it->first; // 引用键值

it->second // 引用映射值。

m.size(); // 元素个数;

m.empty(); // 判m是否空;

m.clear(); // 清空m;

m.begin();  //是指向map中最小元素的迭代器。

m.end();  //是指向map中最大元素下一个位置的迭代器。