小明正在备考英语四级考试,但他的词典太厚了,他记不住哪个单词在哪里。
于是他准备开发一个可以直接找某单词在某页的应用。
但是,他不会做,整天十分烦恼。
好啦,进入正题,大家好,我是@学霸小羊,今天来讲讲map——映射
map翻译为映射,是STL中的常用容器。
其实,数组就是一种映射,比如:int a[100];就是定义了一个int到int的映射。而 a[5]=25 ; 就是把 5 映射到25。
数组总是将 int 类型映射到其它基本类型(称为数组的基类型),这同时也带来了一个问题,有时候我们希望把 string 映射成一个 int ,数组就不方便了。
这时就可以使用map,map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。
而我们,就要通过映射,开发一个小明想要的程序。
(当然,是为了我考英语四级考试用的,我才懒得帮小明做)
- 第 1 行 1 个正整数 N,N<=10,000,表示字典中一共有多少个单词。
- 接下来每两行表示一个单词,其中:
- 第 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中最大元素下一个位置的迭代器。
好啦,就今天就讲到这,拜拜!
标签:map,迭代,映射,int,数据类型,单词,mp From: https://blog.csdn.net/yangyanbin_sam/article/details/142331148