C++ 关联容器之map插入相同键元素与查找元素操作
一、插入相同键元素操作
(1)insert方法
在map中的键必须是唯一的,当想map中连续插入键相同但值不同的元素时,编译和运行时都不会发生任何错误,系统会忽略后面的对已存在的键的插入操作,如
map<int,int> m1;
m1.insert(make_pair(,));
m1.insert(make_pair(,));
for(map<int,int>::iterator mit=m1.begin();mit!=m1.end();mit++){
cout<<mit->first<<":"<<mit->second<<endl;
}
在第二行和第三行分别插入键都为1,但值不同的数据,此操作会忽略第三行的插入操作,其程序运行结果为:
:
通过insert方法插入操作容易误解:
1. 认为插入相同键的操作会报错(正解:插入相同键的操作,无论是编译和运行时都不会报错)
2. 对插入相同键的数据时,后面的插入操作的值会覆盖前面的值,例如会误认为该例子中第三句的插入操作会使最终键为1的数据对应的值会被修改为3(正解:对于插入的数据的键值已存在,那么这个插入操作将会被忽略)
(2)通过下标操作
向map中插入元素还可以用数组(关联数组)下标的方式,先看下面的例子
map<int,int> m1;
m1[]=;
m1[]=;
for(map<int,int>::iterator mit=m1.begin();mit!=m1.end();mit++){
cout<<mit->first<<":"<<mit->second<<endl;
}
运行结果
:
这段代码与insert示例中的代码差别只在第2,3行,而从结果上看通过下标方式插入元素操作后面的赋值操作覆盖了前面的赋值操作。稍后会进一步对下标操作进行分析。
二、查找并读取map中的元素
map容器最大的优点就在于它可以快速定位并读取某一键值的元素。
(1)通过下标查找
如下代码所示
map<string,int> m1;
cout<<m1["abc"]<<endl;
m1["abc"]=;
cout<<m1["abc"]<<endl;
运行结果:
由上面的代码可以看到,我们可以非常方便的通过数组下标的方式对map中的元素进行访问。但你可能对第2行的输出会有一些疑惑,因为最初map是空的,直接读取一个不存在的键,其居然会有正常的输出结果(可能并不是我们想要的),而之前我们并没有对该键进行任何赋值操作。
解释下标索引的机制
用下标访问map中不存在的元素时,将导致向map中添加该下标所指向的新元素,其值会根据类型默认值或默认构造函数进行初始化(如int或初始化为0,string初始化为“”)。
(2)通过方法count()和find()查找
因此,如果判断map中是否存在某键值的元素,一般不能通过取下标的方式判断,因为这样会想map中添加新元素。map标准库中提供了两种判断某键值的元素是否存在的方法,count()方法和find()方法,如下表
| map::count(k) | 返回map中键k出现的次数,这里只能取0(不存在)和1(存在) |
| map::find(k) | 如果容器中存在按k的索引元素,则返回指向该元素的迭代器。如果不存在则返回超出末端的迭代器 |
这两种方法不会向map中插入新元素,因此对map索引键判断时,应选用这两种方法。
C++ 关联容器之map插入相同键元素与查找元素操作的更多相关文章
- iBinary C++STL模板库关联容器之map/multimap
目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...
- [知识点]C++中STL容器之map
UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...
- 类 java.util.Collections 提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。
类 java.util.Collections 提供了对Set.List.Map进行排序.填充.查找元素的辅助方法. 1. void sort(List) //对List容器内的元素排序,排序的规 ...
- STL关联式容器之map和multimap
一,map和multimap的概念 1.map和multimap的基本知识 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中 ...
- C++ STL容器之 map
map 是一种有序无重复的关联容器. 关联容器与顺序容器不同,他们的元素是按照关键字来保存和访问的,而顺序元素是按照它们在容器中的位置保存和访问的. map保存的是一种 key - value 的pa ...
- C++STL模板库关联容器之set/multiset
目录 一丶关联容器简介.set/multiset 二丶演示代码. 一丶关联容器简介.set/multiset 我们的序列容器,底层都是线性表构成的. 比如 vector list deque. 关联容 ...
- STL容器之map
[1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...
- Java容器之Map接口
Map 接口: 1. 实现 Map 接口的类是用来存储键-值(key-value)对: 2. Map 接口的实现类有 HashMap 和 TreeMap 等: 3. Map 类中存储的键-值对,通过键 ...
- [知识点]C++中STL容器之set
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...
随机推荐
- Entity Framework 6.1
Entity Framework 6.1-Code First Code First-代码优先,先创建好领域模型.根据... 2014-04-21 14:56 阅读(6858) 评论(0) Ent ...
- SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
原文:SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 上期回顾: SSIS从理论到实战,再到应用(2)----SSIS包的控制流 首先我们来看看包里面的变量 SSIS ...
- JS function立即调用的几种写法
//立即执行 (function () { alert(1) })() //立即执行 !function () { alert(1) }() //立即执行 +function () { alert(1 ...
- Ubuntu环境下的Redis 配置与C++使用入门
Redis是一个高性能的key-value数据库. Redisedis的出现,非常大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到非常好的补充作用.它 ...
- 【转】Appium测试安卓Launcher以滑动窗体获得目标应用
原文地址:http://blog.csdn.net/zhubaitian/article/details/39755553 所谓Launcher,指的是安卓的桌面管理程序,所有的应用图标都放在laun ...
- web实现QQ第三方登录
开放平台-web实现QQ第三方登录 应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com ...
- POJ 3176-Cow Bowling(DP||记忆化搜索)
Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14210 Accepted: 9432 Desc ...
- AIX加入能telnet远程连接方法的帐户
AIX 加入该账户可以使用命令mkuser 和 SMIT 两种方法,这里有SMIT方式 1.采用root 帐户登录AIX 2.输入 smitty user 3.选择Add a User 4.输入&qu ...
- 10. IDENTITY属性使用小结
原文:10. IDENTITY属性使用小结 从SQL Server 2012开始有了Sequence,简单用列如下: CREATE SEQUENCE TestSeq START INCREMENT ; ...
- IOC 在Mvc中的使用
IOC 在Mvc中的使用 IOC,是控制反转(Inversion of Control)的英文简写, 控制反转一般分为两种类型,依赖注入(Dependency Injection)和依赖查找(Depe ...