2025年数组方法map怎么用(数组方法map怎么用函数表示)

数组方法map怎么用(数组方法map怎么用函数表示)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p> 

讯享网

需要的头文件:

讯享网

需要的其他东西:

 

单独定义一个map:

讯享网

map和其他STL容器在定义上有点不一样,因为map需要确定映射前类型(键key)和映射后类型(值 value ),所以需要在<>内填写两个类型,其中第一个是键的类型,第二个是值的类型。如果是int型映射到int型,就相当于是普通的int型数组。
如果是字符串到整型的映射,必须使用string而不能用char数组:


讯享网

 
讯享网

map一般有两种方式访问: 通过下标访问或通过迭代器访问。下面分别讨论这两种访问方式。
(1)通过下标访问
和访问普通的数组是一样的,例如对一个定义为map<char , int > mp的 map来说,就可以直接使用mp[ ’ c ’ ] 的方式
来访问它对应的整数。于是,当建立映射时,就可以直接使用mp[ ‘c’ ]=20这样和普通数组一样的方式。
但是要注意的是,map中的键是唯一的,也就是说,下面的代码将输出30:
在这里插入图片描述
(2)通过迭代器访问
map迭代器的定义和其他STL容器迭代器定义的方式相同:

 

typename1和typename2就是定义map时填写的类型,这样就得到了迭代器it。
map迭代器的使用方式和其他STL容器的迭代器不同,因为map的每一对映射都有两个typename,
这就决定了必须能通过一个it来同时访问键和值。
事实上,map可以使用it->first来访问键,it->second来访问值。
在这里插入图片描述
在上面这个例子中,it->first是当前映射的键,it->second是当前映射的值。
你从上图可以发现一个特别有意思的现象:map会以键从小到大的顺序自动排序,即按a<m<r的顺序排列这三对映射。
这是由于map内部是使用红黑树实现的(set也是),在建立映射的过程中会自动实现从小到大的排序功能。

(1)find()
find(key)返回键为key的映射的迭代器,时间复杂度为O(logN),N为map中映射的个数。
在这里插入图片描述
(2)erase()
erase()有两种用法: 删除单个元素,删除一个区间内的所有元素。
①删除单个元素
删除单个元素有两种方法:
mp.erase(it),it为需要删除的元素的迭代器。时间复杂度为O(1)。
在这里插入图片描述
mp.erase(key),key为欲删除的映射的键。时间复杂度为O(logN),N为map内元素的个数。
在这里插入图片描述
②删除一个区间内的所有元素。
mp.erase(first,last) , 其中 first为需要删除的区间的起始迭代器,而last则为需要删除的区间的末尾迭代器的下一个地址,
也即为删除左闭右开的区间[first,last)。时间复杂度为O(last-first)。
在这里插入图片描述
(3)size()
size()用来获得map中映射的对数,时间复杂度为O(1)。
在这里插入图片描述
(4)clear()
clear()用来清空map中的所有元素,复杂度为O(N),其中N为map中元素的个数。
在这里插入图片描述

  • 需要建立字符(或字符串)与整数之间映射的数目,使用map可以减少代码量。
  • 判断大整数或者其他类型数据是否存在的题目,可以把map当bool数组使用。
  • 字符串和字符串的映射也很有可能会遇到。

延伸:map的键和值是唯一的,而如果一个键需要对应多个值,就只能用multimap。
另外C++11标准中还增加了unordered_map,以散列代替map内部的红黑树实现,
使其可以用来处理只映射而不按key排序的需求,速度要比map要快的多。

小讯
上一篇 2025-05-31 19:42
下一篇 2025-06-12 12:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/174694.html