博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关联容器map的下标操作(特殊)---map的本质就是关联数组, 数组的本质就是映射!
阅读量:4146 次
发布时间:2019-05-25

本文共 1951 字,大约阅读时间需要 6 分钟。

      下标操作,说白了, 就是一种映射关系。 高中的数列, C语言中的内置数组, 都应该学过吧, 这些都可以理解为下标操作。 

 

      我们知道, 典型的顺序容器中, string, vector, deque都是支持下标操作的, 当然, 很多地方都说支持随机访问, 其实这个随机访问实际上就是只下标操作。

      对于关联容器而言, set, multiset中的元素就是其关键字本身, 所以什么映射关系, 自然就没有下标操作了。 multimap也是没有下标操作的, 因为相同的关键字可能对应不同的值。 而map则特别, 对于一个给定的关键字, 有唯一的一个值和它对应, 非常类似于你我高中学过的数列, 所以, map只是下标操作也是合情合理的。

 

      但是, map的下标操作与顺序容器的下标操作却有不同的地方, 我理解, 区别主要如下: 

      1. vector的下标操作不会让vector元素增加, 但map的下标操作却可以。

      2. 对于vector, *it与v[i]是等价的, 但是, 在map中, *it得到的是一个value_type, 而m[i]得到的是mapped_type, 不要被这个吓唬住, 我等下回仔细说明。

 

     好, 废话也说了不少, 直接玩代码吧:

 

#pragma warning(disable : 4786)#include #include 
#include
using namespace std;int main(){ map
m; m["good"]; m["zoo"] = 10; map
::iterator it; for(it = m.begin(); it != m.end(); it++) { cout << it->first << " " << it->second << endl; } return 0;}

     结果为:

 

good 0

zoo 10

     我们可以看到, 当原来的map中没有关键字"good"和"zoo"时, 硬生生地增加了两对元素。

 

     好, 继续看代码:

 

#pragma warning(disable : 4786)#include #include 
#include
using namespace std;int main(){ map
m; m["good"]; m["zoo"] = 10; m["zoo"]++; cout << m["zoo"] << endl; // m["zoo"]的类型是int类型 map
::iterator it; for(it = m.begin(); it != m.end(); it++) { cout << (*it).first << " " << (*it).second << endl; // *it的类型是一个"string到int的映射对"类型 } return 0;}

     结果为:

 

11

good 0
zoo 11

     

     不得不说, map的下标操作非常方便, 从此, 我们有了更加强大的数组: 关联数组。 

 

     我之前已经说过, 数组的本质就是映射, 也给出过好几个map的重要应用的例子, 现在回头看, 果真如此啊!

 

      最后, 让我们一起来欣赏一下map这个关联数组的一个经典应用:统计单词数目

 

#pragma warning(disable : 4786)#include #include 
#include
#include
using namespace std;int main(){ ifstream cin("test.txt"); // 这个cin会屏蔽掉std::cin if(!cin) { return 1; } map
m; string word; while(cin >> word) { m[word]++; // 非常非常经典啊, 我被map折服得五体头地 } map
::iterator it; for(it = m.begin(); it != m.end(); it++) { cout << (*it).first << " " << (*it).second << endl; } return 0;}

     经测试, ok.

 

 

 

 

转载地址:http://uugvi.baihongyu.com/

你可能感兴趣的文章
Python下载
查看>>
输入url后发生了什么
查看>>
神经网络学习 BP RBF
查看>>
基于 SSH 框架的 Criteria 和 DetachedCriteria 多条件查询
查看>>
倒计时代码
查看>>
Win10 rabbitmqctl 命令报错
查看>>
MessageBox 之delphi版
查看>>
android 通过setalpha设置透明度 无效及3.0以下不兼容的问题
查看>>
[LeetCode 题解]: Longest Common Prefix
查看>>
fastjson工具类
查看>>
SQL内联多个表
查看>>
Nandflash镜像尾部不应填充0xFF
查看>>
Windows下安装Python3.4.2
查看>>
CKEditor中加入代码高亮插件syntaxhighlighter
查看>>
Mysql存储引擎__笔记
查看>>
SpringBoot---静态页面加载
查看>>
洛谷——P2827 蚯蚓
查看>>
一丶Python模块之getpass模块
查看>>
Spring详解(二)------IOC控制反转
查看>>
《机器学习:实用案例解析》,读书笔记
查看>>