C++ 关联容器之map插入相同键元素与查找元素操作
来源:互联网 发布:淘宝网官网下载安装 编辑:程序博客网 时间:2024/06/08 14:26
一、插入相同键元素操作
(1)insert方法
在map中的键必须是唯一的,当想map中连续插入键相同但值不同的元素时,编译和运行时都不会发生任何错误,系统会忽略后面的对已存在的键的插入操作,如
1 map<int,int> m1;2 m1.insert(make_pair(1,2));3 m1.insert(make_pair(1,3));4 for(map<int,int>::iterator mit=m1.begin();mit!=m1.end();mit++){5 cout<<mit->first<<":"<<mit->second<<endl;6 }
在第二行和第三行分别插入键都为1,但值不同的数据,此操作会忽略第三行的插入操作,其程序运行结果为:
1:2
通过insert方法插入操作容易误解:
1. 认为插入相同键的操作会报错(正解:插入相同键的操作,无论是编译和运行时都不会报错)
2. 对插入相同键的数据时,后面的插入操作的值会覆盖前面的值,例如会误认为该例子中第三句的插入操作会使最终键为1的数据对应的值会被修改为3(正解:对于插入的数据的键值已存在,那么这个插入操作将会被忽略)
(2)通过下标操作
向map中插入元素还可以用数组(关联数组)下标的方式,先看下面的例子
1 map<int,int> m1;2 m1[1]=2;3 m1[1]=3;4 for(map<int,int>::iterator mit=m1.begin();mit!=m1.end();mit++){5 cout<<mit->first<<":"<<mit->second<<endl;6 }
运行结果
1:3
这段代码与insert示例中的代码差别只在第2,3行,而从结果上看通过下标方式插入元素操作后面的赋值操作覆盖了前面的赋值操作。稍后会进一步对下标操作进行分析。
二、查找并读取map中的元素
map容器最大的优点就在于它可以快速定位并读取某一键值的元素。
(1)通过下标查找
如下代码所示
1 map<string,int> m1;2 cout<<m1["abc"]<<endl;3 m1["abc"]=8;4 cout<<m1["abc"]<<endl;
运行结果:
08
由上面的代码可以看到,我们可以非常方便的通过数组下标的方式对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插入相同键元素与查找元素操作
- 关联式容器map/multimap之元素个数统计、查找元素及元素的随机访问
- 关联式容器map/multimap之初始化、删除元素、交换元素及清空操作
- c++map查找元素
- C++语法基础--关联容器--map(二)--查找并读取map中的元素count(),find()与 从map对象中删除元素erase()
- C++ map关联容器删除元素
- STL中map容器的元素插入
- c++ map容器的元素插入
- 关联式容器map/multimap之元素大小比较(键值比较和实值比较)
- vector向量容器元素排序与查找
- set 中对象元素插入与查找
- map容器创建、元素插入和前向遍历访问
- map容器元素的三种插入方式
- map容器的四种插入元素方法
- C++STL之关联容器【map】【set】
- C++primer_关联容器之map
- C++MAP关联容器
- C++map关联容器
- 最大乘积(Maximum Product,UVa 11059)
- Aplication electronics OpenCart 主题模板 ABC-0167
- BAT线下战争
- 第八周项目二 数据结构之自建算法库——链串
- php学习之CGI,fastCGI, php-cgi, php-fpm
- C++ 关联容器之map插入相同键元素与查找元素操作
- java的jdbc到底怎么学?(一)
- windows的远程桌面如何全屏
- 中国社会九大阶层划分
- 10月19日
- 脚本语言的理解
- Chrome vim扩展 之 cVim 插件 键盘党的利器
- eclipse或者myeclipse调试不显示变量值
- 闪屏页的实现简单原理