c++映射详解

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

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

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

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

map内部的实现是建立一颗红黑树,对数据自动排序。因此多数操作的时间复杂度是log(N) 。

一、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;

因为map的每一对映射都有两个typename,所以,我们使用“it->first”来访问“键”(下标),而使用“it->second”来访问“值”(内容)。

for(it=mp.begin(), it !=mp.end(), it++)

cout<<it->first<<':'<<it->second<<endl;

2. Map 使用方法总结:

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

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

it->first 引用键值, it->second 引用映射值。

m.size(); 元素个数;

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

m.clear(); 清空m;它清除map并将其大小设置为0。

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

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

m.find(); 查找具有给定键值k 的元素。如果找到该元素,则返回指向该元素的迭代器。否则,它返回一个指向map末尾的迭代器,即map :: end()。

m.erase(); 用于从map容器中删除与给定键值关联的单个元素或元素范围。因此,将通过删除元素的数量来减小尺寸。

iterator erase (const_iterator position); //从 C++ 11 开始

size_type erase (const key_type& k); //从 C++ 11 开始

iterator erase (const_iterator first, const_iterator last); //从 C++ 11 开始

m.insert(); 用于在map中插入新元素。因为元素键在map中是唯一的,所以插入操作首先检查给定键是否已存在于map中,如果键已存在于map中,则它不会插入map中,并且迭代器将迭代到现有键返回,否则在map中插入新元素。

3. 默认排序

一般而言,使用map的时候直接采取m a p < t y p e n a m e A , t y p e n a m e B > map<typename A, typename B>map<typenameA,typenameB>的形式即可,map的内部实现默认使用A类型变量的升序来排序map的值。

4.mapupper_bound/lower_bound

iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。

iterator upper_bound( const key_type &key ):返回一个迭代器,指向键值> key的第一个元素。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子小院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值