【数据类型】映射map

小明正在备考英语四级考试,但他的词典太厚了,他记不住哪个单词在哪里。

于是他准备开发一个可以直接找某单词在某页的应用。

但是,他不会做,整天十分烦恼。

好啦,进入正题,大家好,我是@学霸小羊,今天来讲讲map——映射

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

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

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

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

而我们,就要通过映射,开发一个小明想要的程序。

(当然,是为了我考英语四级考试用的,我才懒得帮小明做)

  1. 第 1 行 1 个正整数 N,N<=10,000,表示字典中一共有多少个单词。
  2. 接下来每两行表示一个单词,其中:
    • 第 1 行是一个长度小于或等于 100 的字符串,表示这个单词,全部小写字母,单词不会重复。
    • 第 2 行是 1 个整数,表示这个单词在字典中的页码。
    • 接下来一行是 1 个整数 M ,M <= 10,000,表示要查的单词数。
    • 接下来的M行,每行一个字符串,表示要查的单词,保证在字典中存在

做这个程序,想必大家都会想到结构体,但是,请看(不是VCR):

这,打破了我们美好的幻想。

关键时刻,映射出场了!

映射其实是数组的变形,它可以随意改变数组下标的类型,以及数组存储内容的类型。

定义方法:

map<string,int> mp;
//定义以字符串为下标、int类型为映射mp

上面代码中的string和int是可以替换的。

映射,顾名思义,通过某物映射到另一物;而上面代码就是通过字符串映射他的页码(整型)。

而那个“下标”,叫 键值(关键值);和他对应的那个值,较映射值。

例:

#include<bits/stdc++.h>
using namespace std;
map<string,int> mp;
int main(){
    mp["ant"]=10;mp["bear"]=14;mp[elephant]=21;
    string s;
    cin>>s;
    cout<<mp[s];
    return 0;
}
/*
输入:ant
输出:10
*/

map除了可以用下标(键值)访问,还可以用迭代器访问:

例如:定义了 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;
	

总结起来,就是一下这几种操作:


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中最大元素下一个位置的迭代器。

好啦,就今天就讲到这,拜拜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值