C++ 关联容器之map插入相同键元素与查找元素操作

时间:2021-11-08 11:44:37

一、插入相同键元素操作

(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插入相同键元素与查找元素操作的更多相关文章

  1. iBinary C&plus;&plus;STL模板库关联容器之map&sol;multimap

    目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...

  2. &lbrack;知识点&rsqb;C&plus;&plus;中STL容器之map

    UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...

  3. 类 java&period;util&period;Collections 提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。

      类 java.util.Collections 提供了对Set.List.Map进行排序.填充.查找元素的辅助方法. 1. void sort(List) //对List容器内的元素排序,排序的规 ...

  4. STL关联式容器之map和multimap

    一,map和multimap的概念 1.map和multimap的基本知识 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中 ...

  5. C&plus;&plus; STL容器之 map

    map 是一种有序无重复的关联容器. 关联容器与顺序容器不同,他们的元素是按照关键字来保存和访问的,而顺序元素是按照它们在容器中的位置保存和访问的. map保存的是一种 key - value 的pa ...

  6. C&plus;&plus;STL模板库关联容器之set&sol;multiset

    目录 一丶关联容器简介.set/multiset 二丶演示代码. 一丶关联容器简介.set/multiset 我们的序列容器,底层都是线性表构成的. 比如 vector list deque. 关联容 ...

  7. STL容器之map

    [1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...

  8. Java容器之Map接口

    Map 接口: 1. 实现 Map 接口的类是用来存储键-值(key-value)对: 2. Map 接口的实现类有 HashMap 和 TreeMap 等: 3. Map 类中存储的键-值对,通过键 ...

  9. &lbrack;知识点&rsqb;C&plus;&plus;中STL容器之set

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...

随机推荐

  1. bootstrap 日期控件 bootstrap-datepicker

    http://www.bootcss.com/p/bootstrap-datetimepicker/

  2. magento2 客户端模式less样式修改。

    后台模式改为客户端编译,修改less后要删除静态文件,然后清除缓存,清除浏览器缓存.刷新多次后生效.

  3. C&num;学习1

    一.C#可以干什么? 1.桌面应用程序,WinForm 2.Internet应用程序,ASP.Net 3.手机开发,WindowsPhone8 二..Net开发学习路线 C#语言——>简单的Wi ...

  4. 队列(顺序存储)C&plus;&plus;模板实现

    队列:一端进行插入,另一端进行删除的线性结构,具有先进先出性.利用数组来实现队列将面临"假溢出"的情况,如下图所示: front:永远指向队首元素,队首在本文中是允许删除元素的一端 ...

  5. Benchmark与Profiler---性能调优得力助手

    转载请注明出处:http://blog.csdn.net/gaoyanjie55/article/details/34981077 性能优化.它是一种诊断性能瓶颈,能问题点进行优化的过程.前两天听完s ...

  6. 对 List 、Set、Map 的理解

    1.List 继承自 collection 接口,List 的元素有顺序,而且可以重复,各元素的顺序就是对象插入的顺序. 子类 Arraylist:储存方式是数组(索引 0 开始),线程不安全,效率高 ...

  7. 使用C&plus;&plus;的string实现高精度加法运算

    对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算. 本文讨论借助C++的string来实现高精度的运算. 首先输入的量直接存储为st ...

  8. &lbrack;面试&rsqb;synchronized

    synchronized 把面试中遇到的问题进行了整理. 本篇文章copy+整理自: 1. http://www.cnblogs.com/lingepeiyong/archive/2012/10/30 ...

  9. Sebastian Ruder &colon; NLP 领域知名博主博士论文面向自然语言处理的神经网络迁移学习

    Sebastian Ruder 博士的答辩 PPT<Neural Transfer Learning for Natural Language Processing>介绍了面向自然语言的迁 ...

  10. Java设计模式之单例模式(七种写法)

    Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...