0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是 map?

汽车电子技术 来源:C语言Plus 作者: Maye426 2023-02-27 15:41 次阅读

一、什么是 map?

map 容器,又称键值对容器,即该容器的底层是以红黑树变体实现的,是典型的关联式容器。这意味着,map 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。跟任意其它类型容器一样,它能够存放各种类型的对象。

二、容器特性

1.存储结构

map是由多个节点(二叉树中的红黑树变体)组成的。

2.键值对

map是一个键值对序列,即(key,value)——封装在结构体pair中,它提供基于key的快速检索能力,不能在指定位置插入,但支持at(pos)和[]操作。如:map[key]=value;

multimap与map的区别:map中的key只能唯一,每个key只能出现一次;而multimap中同一key可以出现多次。

3.双向迭代器

不支持随机访问迭代器,只能从容器中第一个元素或最后一个元素开始遍历容器,直到找到该位置。

三、基本函数实现

1,构造函数

  • map();创建一个空map
  • map(const map&);复制构造函数
  • map(begin,end);复制[begin,end)区间内的元素,到另一个map中

2.map插入

  • pair insert(const T& x); //往容器插入元素,返回pair

    在map中插入元素的三种方式:

    假设 map mapStu;

    一、通过pair的方式插入对象

    mapStu.insert( pair(3,"小张") );

    二、通过pair的方式插入对象

    mapStu.inset(make_pair(-1, “校长-1”));

    三、通过value_type的方式插入对象

    mapStu.insert( map::value_type(1,"小李") );

    四、通过索引(key)的方式插入值

    mapStu[3] = “小刘";

    mapStu.at(4) = “小王";

    • 注意:使用key的方式插入,当key存在时会直接修改key对应的值,当key不存在时会新建一个然后插入

3.map删除

  • iterator erase(iterator it);删除键值对中迭代器指向元素
  • iterator erase(iterator first,iterator last);删除键值对中[first,last)中元素
  • size_type erase(const key_type& key); 删除指定的元素
  • void clear();清空键值对中所有元素

4.查找函数

  • iterator map.find(key); 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();

  • size_type map.count(keyElem); //返回容器中key为keyElem的对组个数。对map来说,要么是0,要么是1。对multimap来说,值可能大于1。

  • pair map.equal_range(keyElem); //返回容器中key与keyElem相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)。

    以上函数返回两个迭代器,而这两个迭代器被封装在pair中。

5.判断函数

  • bool empty() const;判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。

6.大小函数

  • int size() const;返回键值对中元素的个数
  • int max_size() const;返回最大可允许的map元素数量值

7.其他函数

  • void swap(map&);交换两个同类型容器的数据

四、基本用法

#include 
#include
using namespace std;
int main()
{
  //保存学生学号和姓名
  map<int,string> s;
  for (int i = 0; i < 10; i++)
  {
    string ch = "ABCDEFGHIJ";
    string name= "maye";
    //注意pair的类型参数,需要和map的一致
    s.insert(pair<int,string>(i,name+ch[i]));
  }
  s.insert(make_pair(111, "C语言PLUS"));
  s.insert(map<int, string>::value_type(222, "法外狂徒"));
  s[333] = "顽石";


  cout << "学号:" <<" "<< "姓名:" << endl;
  for (map<int, string>::iterator it = s.begin(); it != s.end(); it++)
  {
    cout << it->first << "      " << it->second << endl;
  }
  //cout << "\\nmap size():" << s.size() << endl;


  //查找指定的key值,返回指向的迭代器,没有找到返回end()迭代器,所以再输出之前需要判断是否找到
  map<int, string>::iterator it1 = s.find(6);
  if (it1 != s.end())
  {
    cout << it1->first << " " << it1->second << endl;
  }
  //如果map中有等于4的key,则返回指向4的迭代器,如果没有返回第一个大于4的元素的迭代器,没有找到返回end()迭代器
  it1 = s.lower_bound(4);
  if (it1 != s.end())
  {
    cout << it1->first << " " << it1->second << endl;
  }
  //如果map中有大于4的key,返回第一个大于4的元素的迭代器,没有找到返回end()迭代器
  it1 = s.upper_bound(4);
  if (it1 != s.end())
  {
    cout << it1->first << " " << it1->second << endl;
  }
  cout << "------------------我是 C语言Plus 华丽分割线" << endl;
  //定义对组,接受equal_range()的返回值
  pair
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 容器
    +关注

    关注

    0

    文章

    492

    浏览量

    22041
  • MAP
    MAP
    +关注

    关注

    0

    文章

    48

    浏览量

    15126
  • 元素
    +关注

    关注

    0

    文章

    47

    浏览量

    8419
收藏 人收藏

    评论

    相关推荐

    【Linux编程】如何使用gcc编译源代码时输出map文件?

    【Linux编程】如何使用gcc编译源代码时输出map文件?
    的头像 发表于 08-15 14:08 8064次阅读
    【Linux编程】如何使用gcc编译源代码时输出<b class='flag-5'>map</b>文件?

    C++之map/mutimap容器

    map/multimap容器,也是一个关联式容器,底层通过二叉树实现。
    的头像 发表于 07-17 09:45 1026次阅读
    C++之<b class='flag-5'>map</b>/mutimap容器

    基于Google Map Api的Android导航应用

    本文提出并实现了一种基于Google Map Api 的Android 导航应用,能够给用户提供人性化和智能化的地图导航服务。
    发表于 11-21 15:09 5216次阅读

    Map Service Engine Based On We

    Abstract:A design and implementation of map service engine based on web is introduced
    发表于 07-23 10:43 17次下载

    MAP图对调速电机的作用

    MAP图对调速电机的作用,学习资料,感兴趣的可以看看。
    发表于 10-26 15:12 0次下载

    最好的辅助数据,MAP图对调速电机有什么作用?

    电机中的MAP图是电机测试时生成的一种数据曲线图,主要是反映在不同转速、扭矩下的电机效率分布情况,通俗而言就是效率分布图,类似于我们地理课上常见的等高线图。 在说调速电机之前,我们先了解一下MAP图的作用。 MAP图是什么?
    发表于 11-04 19:02 2579次阅读
    最好的辅助数据,<b class='flag-5'>MAP</b>图对调速电机有什么作用?

    纹理映射技术中Mip_Map的研究_曾云

    纹理映射技术中Mip_Map的研究_曾云
    发表于 03-15 11:08 0次下载

    基于DSP的Max-Log-MAP算法解析

    是近年来研究工作的热点。Turbo码采用反馈迭代译码结构,成员译码器使用最大后验概率(MAP)译码算法译码,由于MAP算法含有大量的指数运算与对数运算,给实现带来极大的困难,在工程应用中,通常采用其对数域的简化算法Log-MAP
    发表于 11-04 10:47 5次下载
    基于DSP的Max-Log-<b class='flag-5'>MAP</b>算法解析

    mapreduce 中MAP进程的数量怎么控制?

    1.如果想增加map个数,则设置mapred.map.tasks 为一个较大的值2.如果想减小map个数,则设置mapred.min.split.size 为一个较大的值3.如果输入中有很多小文件,依然想减少
    发表于 01-02 14:04 1875次阅读
    mapreduce 中<b class='flag-5'>MAP</b>进程的数量怎么控制?

    Mapreduce和Hive中map reduce个数设定

    Mapreduce中mapper个数的确定: 在map阶段读取数据前,FileInputFormat会将输入文件分割成split。split的个数决定了map的个数。 影响map个数,即split
    发表于 01-02 14:21 6086次阅读

    mapreduce设置map个数_mapreduce设置map内存

    map阶段读取数据前,FileInputFormat会将输入文件分割成split,split的个数决定了map的个数。
    发表于 01-02 14:26 1.1w次阅读
    mapreduce设置<b class='flag-5'>map</b>个数_mapreduce设置<b class='flag-5'>map</b>内存

    Java Map的几种循环方式学习总结

    本文档内容介绍了基于Java Map的几种循环方式学习总结,供参考
    发表于 03-19 15:51 0次下载

    单片机中的MAP文件分析

    一、要让Keil生成map文件,要设置:再重新编译,没有错误后,就会生成map文件了。二、map文件中相关概念:段(section) :描述映像文件的代码和数据块。RO:Read-Only的缩写
    发表于 11-15 10:36 12次下载
    单片机中的<b class='flag-5'>MAP</b>文件分析

    MAP传感器有什么作用?是如何工作的?

    MAP是歧管绝对压力的缩写。该MAP传感器通过测量进气歧管中的空气量来检测进入发动机的空气量。然后,ECU使用此空气测量来管理注入发动机的汽油量并修改点火正时,这两者都对您的发动机正常运行至关重要。
    发表于 05-23 15:32 2320次阅读
    <b class='flag-5'>MAP</b>传感器有什么作用?是如何工作的?

    List 转 Map的方法

    在我们平时的工作中,充满了各种类型之间的转换。今天小编带大家上手 List 转 Map 的各种操作。 我们将假设 List 中的每个元素都有一个标识符,该标识符将在生成的 Map 中作为一个键
    的头像 发表于 10-09 16:10 1544次阅读