• 跟着<<C++Primer 学Map容器>>


      Map容器,顾名思义,地图,是用来进行索引的一个容器。

    在定义Map容器之前,c++首先定义了一个pair类型,这个类型有两个参数pair<T1,T2>。

      pair类型的对象通过点号(.)访问其成员(都是公有成员)first与second。  

      pair类型可以通过make_pair()函数来进行初始化。

    下面定义map类型的对象

      map<string ,int> objmap;//这个语句定义了一个空的map对象,其中string类型的为索引,int类型的为其值。

    对于自定义类型作为键类型,特别要注意的是自定义类型必须定义<这个操作符。并且必须是严格弱排序。也即两个键比较时,不能出现相互小于的情况。

      在map类型下面定义了三个类型。

      

    map<K,V>::key_type   //在map容器中,作为索引的键的类型
    map<K,V>::mapped //在map容器中,键所关联的值的类型
    map<K,V>::value_type //他是个pair类型

    我们需要注意的是map的迭代器类型解引用将产生一个pair类型的对象

    map<K,V>::iterator map_it = mapobj.begin();

    map_it->second;//这个便是访问pair类型的第二个值

    给map中添加元素,有两种方法。

    第一:

    用下标访问元素时,如果map中已经存在了这个索引,则不做任何操作,但是如果索引中没有这个下标时,会将这个下标添加到索引中,并且将索引的值默认进行初始化。

    1 mapobj["gaoteng"];

    假如map中没有"gaoteng"这个索引的话,会将"gaoteng"加入到map中,同时将“gaoteng”所指示的值初始化。

    需要强调的是:下标操作返回的是map<K,V>::mapped_type,而迭代器返回的是pair对象,这个特性与顺序容器不同。

    第二:

    用map对象的成员insert()函数来插入。

    用这个函数特别要注意的是他的返回值类型。

    在形参中是pair类型的insert版本,将返回一个值,这个值是pair对象,他包含一个指向插入元素的迭代器和一个bool类型的表示是否插入的变量。

    如:

    pari<map<K,V>::iterator,bool> ret = mapobj.insert(make_pair(k,v));

    最后提供两个检查map元素的方法:

    m.count(k)  //统计m中k出现的次数
    m.find(k)//返回指向k索引的迭代器,如果没找到,返回超出末端的迭代器

    从map中删除对象

    与顺序容器不同的是,erase()成员函数返回void,而顺序容器则返回一个指向被删除元素的后一个迭代器。

    与顺序容器一样,也可以通过 m.begin()与m.end()获取迭代器然后进行遍历,只不过遍历方式是按索引的升序排列的。


  • 相关阅读:
    短时间内点击 同一操作,进行缓存
    git项目如何查看代码提交数量
    Python计数器collections.Counter用法详解
    SQL Server如何生成随机数
    博客园美化 | part04-添加代码复制按钮
    博客园美化 | part03-添加目录
    博客园美化 | part01-自定义代码块主题样式
    博客园美化 | part02-添加文章markdown链接一键复制按钮
    hexo | leancloud相关问题: Code 403: Access denied by API domain white list,Please check your security domain.
    关于分类和标签管理问题
  • 原文地址:https://www.cnblogs.com/gaoteng/p/2376047.html
Copyright © 2020-2023  润新知