我不熟悉的map
讲map之前,其实很多都在set那篇讲过了。我不熟悉的set。
很多的API都类似,不会再累述。
map和set都是用红黑树实现的,但是set只能存单个值,它的key和value都是同一个,map不一样,它的每一个key都映射一个value.
接下来先介绍一些map自己的东西,再把和set一样的提一下。
四种插入新键值对的方式
现在我们定义一个空的map:
map<int,string> m;
下面展示四种方式。
一、pair方式
m.insert(pair<int,string>(10,"Tom"));
这是通过创建一个pair的匿名对象来保存数据。
二、make_pair
m.insert(make_pair(0,"Jerry"));
我们知道,make_pair就返回一个对组,这个对组就能直接赋值给map。
三、value_type方式
m.insert(map<int,string>::value_type(1,"Super"));
通过map内置的一个value_type来赋值。
四、直接插入
m[9] = "John";
这个方法看起来是最简单的,却暗藏杀机。当我们写以下语句:
m[100];
我们没有给它一个value,本意可能不想插入,但是一旦我们这么写,它就会给我们默认插进去,value为默认值。所以这个方法很可能使用不当。所以建议采用第二种创建方式,比较短,而且不容易出错。
如果访问key和value
map保存了两个值,提供了first和second两个函数来访问key和value,互相对应。
如下:
int main()
{
map<int, string> m;
m.insert(make_pair(0, "Jerry"));
m.insert(map<int, string>::value_type(1, "Super"));
m[9] = "John";
m[100];
for (auto mapIt = m.begin(); mapIt != m.end(); ++mapIt)
cout << "key:" << mapIt->first << " value:" << mapIt->second << endl;
return 0;
}
输出:
可以看到:
- 同样也以key排好序了。
- 且m[100]也插入了一个空。
- 我们通过迭代器调用了second和first来访问key和value。
同样的,插入也返回一个pair<iterator,bool>类型。
指定规则排序
与set无异,在创建的同时就指定排序规则。将上述代码中,声明m的语句改为:
// MyCmp是仿函数。
map<int,string,MyCmp> m;
其它操作
查找操作
与set无异。
find(key); //查找键key是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回map.end();
count(keyElem);//返回容器中key为keyElem的对组个数。对map来说,要么是0,要么是1。对multimap来说,值可能大于1。
lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。
大小操作
size();//返回容器中元素的数目
empty();//判断容器是否为空
与set无异。
删除操作
clear(); //删除所有元素
erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg,end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(keyElem);//删除容器中key为keyElem的对组。
与set无异。
我不熟悉的map的更多相关文章
- ["1", "2", "3"].map(parseInt)?
["1", "2", "3"].map(parseInt)得到什么? 答案是:[1, NaN, NaN]. 原因:parseInt接收的是两 ...
- Java数据结构之Map学习总结
前言: 前面学习总结了List的使用及效率对比,今天总结学习一下键值映射关系Map,顺便学习一下Android中使用Map需要注意哪些,以及谷歌官方针对Android对Map做了哪些优化. 先了解下M ...
- 【跟着子迟品 underscore】Array Functions 相关源码拾遗 & 小结
Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...
- 泛函编程(37)-泛函Stream IO:通用的IO处理过程-Free Process
在上两篇讨论中我们介绍了IO Process:Process[I,O],它的工作原理.函数组合等.很容易想象,一个完整的IO程序是由 数据源+处理过程+数据终点: Source->Process ...
- ACM 盗梦空间
盗梦空间 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 <盗梦空间>是一部精彩的影片,在这部电影里,Cobb等人可以进入梦境之中,梦境里的时间会比现实中 ...
- Java数据结构之Set学习总结
前言: 前面介绍了Java的数据结构List.Map,今天抽空学习总结一下另一种数据结构Set. Set介绍 Set相对于List.Map是最简单的一种集合.集合中的对象不按特定的方式排序,并且没有重 ...
- ArcGIS API for JavaScript 4.2学习笔记[6] goTo()地图动画
这是个很有意思的例子,不过例子给的比较复杂,需要查很多API,我会在文章最后给出关键的类和属性解释. 同样发现一个很有意思的事儿:博客园似乎有爬虫,我4号发布的blogs,5号就在百度和google搜 ...
- 【JDK1.8】JDK1.8集合源码阅读——Set汇总
一.前言 这一篇里,我将对HashSet.LinkedHashSet.TreeSet进行汇总分析,并不打算一一进行详细介绍,因为JDK对Set的实现进行了取巧.我们都知道Set不允许出现相同的对象,而 ...
- 万类之父——Object
jdk1.8.0_144 Object类作为Java中的顶级类,位于java.lang包中.所有的类直接或者间接都继承自它.所以Object类中的方法在所有类中都可以直接调用.在深入介绍它的API时, ...
随机推荐
- [BZOJ4180] 字符串计数
膜一发KsCla巨佬 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5 ...
- MySQL创表--分页--自关联--
创建表book create table t_book( id int unsigned auto_increment primary key, bookName varchar(255) defau ...
- 福建工程学院第十四届ACM校赛M题题解 fwt进阶,手推三进制fwt
第九集,结束亦是开始 题意: 大致意思就是给你n个3进制的数字,让你计算有多少对数字的哈夫曼距离等于i(0<=i<=2^m) 思路: 这个是一个防ak题,做法是要手推公式的fwt 大概就这 ...
- EBS描述性弹性域及键弹性域总结
一.描述性弹性域 前言介绍: 描述性弹性域的实质就是系统预留自定字段,系统可以使用说明性弹性域来获取业务所特有的重要附加信息.系统可能自定义说明性弹性域,以显示存储更多信息的字段,提供一套完整的“自定 ...
- O008、LVM类型的Storage Pool
参考https://www.cnblogs.com/CloudMan6/p/5277927.html LVM类型的Storage Pool 不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上 ...
- JavaScript斑马线表格制作
//实现斑马线表格 //方法1: document.write('<table border="1">'); for(var i=1; i<11; i++){ i ...
- python之开发规范
命名规范 Python之父推荐的规范 Type Public Internal Modules lower_with_under _lower_with_under Packages lower_wi ...
- weex 通用样式以及需要注意的问题
一.说明 weex 对于 css 样式的支持是非常有限的,并且使用样式的时候,必须遵循 weex 定义的规则. 对于不遵循 weex 样式规则的代码,往往在 web 页面上有效,而在 native 环 ...
- NLP 基于kashgari和BERT实现中文命名实体识别(NER)
准备工作,先准备 python 环境,下载 BERT 语言模型 Python 3.6 环境 需要安装kashgari Backend pypi version desc TensorFlow 2.x ...
- Mac 常用软件
command+space开启新的一天 窗口管理:Magnet 写代码:Pycharm.vscode.sublime text 虚拟机:VMware Fusion(买不起Parallels Deskt ...