当前位置: 首页 > news >正文

【数据类型】映射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中最大元素下一个位置的迭代器。

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

相关文章:

  • 艾丽卡的区块链英语小课堂
  • AI问答-HTTP:理解 Content-Disposition
  • C/C++内存分布
  • 二叉搜索树
  • 零基础如何学会Appium自动化测试?
  • ESP8266+httpServer+GET+POST实现网页验证密码
  • 王者荣耀改重复名(java源码)
  • 在线IP代理检测:保护您的网络安全
  • LineageOS连接网络提示IP配置失败
  • Maven的高级特性
  • 【数学建模】2024数学建模国赛经验分享
  • 在Java中,==和equals的区别,以及重写equals()方法还要重写hashCode()方法
  • 计算机知识科普问答--12 (56-60)
  • 【HarmonyOS】鸿蒙头像上传-(编辑个人信息页- 头像上传)+实时数据更新
  • 使用Microsoft Visual Studio Installer Projects 2022打包桌面程序
  • NoSQL数据库实战派
  • springboot实战学习笔记(2)
  • Thinkphp5 + Swoole实现邮箱异步通知
  • 【Linux 从基础到进阶】Docker 容器技术基础与应用
  • 【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化
  • 字母哥动了离开的心思,他和雄鹿队的缘分早就到了头
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵
  • 2025年上海好护士揭晓,上海护士五年增近两成达12.31万人
  • 烈士沈绍藩遗孤、革命家帅孟奇养女舒炜逝世,享年96岁
  • 数理+AI+工程,上海交大将开首届“笛卡尔班”招生约20名
  • 一热就出汗 VS 热死都不出汗的人,哪个更健康?