当前位置:网站首页 > Haskell函数式编程 > 正文

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



需要的头文件:

 

需要的其他东西:

 

单独定义一个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要快的多。

到此这篇数组方法map怎么用(数组方法map怎么用函数表示)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • convwthn函数(convwthn函数求卷积)2025-01-27 19:00:06
  • convhull函数(conv函数是什么意思)2025-01-27 19:00:06
  • pivot函数用法(pivot函数用法oracle)2025-01-27 19:00:06
  • 电视软件后缀格式(电视软件后缀格式怎么设置)2025-01-27 19:00:06
  • conv2d函数(conv2d函数干什么的)2025-01-27 19:00:06
  • 服务器部署方式集群主备(服务器集中部署)2025-01-27 19:00:06
  • modbus报文格式和4x的关系(modbus485报文解析)2025-01-27 19:00:06
  • 报文格式化错误怎么解决(报文格式化错误,请稍后检查账户余额)2025-01-27 19:00:06
  • 一级写文章,高手如何拟标题?向上概括主题,向下分解演绎二级写文章,高手如何拟标题?向上概括主题,向下分解演绎格式示范(一级写文章,高手如何拟标题?向上概括主题,向下分解演绎二级写文章,高手如何拟标题?向上概括主题,向下分解演绎内容)2025-01-27 19:00:06
  • 字符串转成int类型(字符串转成int类型的函数)2025-01-27 19:00:06
  • 全屏图片