zoukankan      html  css  js  c++  java
  • STL学习系列九:Map和multimap容器

    1.map/multimap的简介

    • map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。
    • map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。
    • map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。
    • map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。
    • multimap与map的区别:map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次。multimap不支持[]操作符。
    • #include <map>  

    2.map/multimap对象的默认构造

    map/multimap采用模板类实现,对象的默认构造形式:

    • map<T1,T2> mapTT;
    • multimap<T1,T2>  multimapTT;  

    其中T1,T2还可以用各种指针类型或自定义类型。

    3.map的插入与迭代器

    •  map.insert(...);    //往容器插入元素,返回pair<iterator,bool>
    • 在map中插入元素的三种方式:
    • 假设  map<int, string> mapStu;
    •  一、通过pair的方式插入对象
    • mapStu.insert(  pair<int,string>(3,"小张")  );
    •  二、通过pair的方式插入对象
    • mapStu.inset(make_pair(-1, “校长-1”));
    • 三、通过value_type的方式插入对象
    • mapStu.insert(  map<int,string>::value_type(1,"小李")  );
    • 四、通过数组的方式插入值
    • mapStu[3] = “小刘";
    • mapStu[5] = “小王";

            

    前三种方法,采用的是insert()方法,该方法返回值为pair<iterator,bool>

    第四种方法非常直观,但存在一个性能的问题。插入3时,先在mapStu中查找主键为3的项,若没发现,则将一个键为3,值为初始化值的对组插入到mapStu中,然后再将值修改成“小刘”。若发现已存在3这个键,则修改这个键对应的value。

    string strName = mapStu[2];   //取操作或插入操作

    只有当mapStu存在2这个键时才是正确的取操作,否则会自动插入一个实例,键为2,值为初始化值。

    4.map对象的拷贝构造与赋值

    • map(const map &mp);                   //拷贝构造函数
    • map& operator=(const map &mp);         //重载等号操作符
    • map.swap(mp);                                    //交换两个集合容器

    5.map的大小

    • map.size();          //返回容器中元素的数目
    • map.empty();//判断容器是否为空

    6.map的删除

    • map.clear();                 //删除所有元素
    • map.erase(pos);         //删除pos迭代器所指的元素,返回下一个元素的迭代器。
    • map.erase(beg,end);              //删除区间[beg,end)的所有元素  ,返回下一个元素的迭代器。
    • map.erase(keyElem);     //删除容器中key为keyElem的对组。

    7.map的查找

    • map.find(key);   查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
    • map.count(keyElem);   //返回容器中key为keyElem的对组个数。对map来说,要么是0,要么是1。对multimap来说,值可能大于1。
  • 相关阅读:
    JS 子窗口向父窗口传值
    CSS垂直居中盘点
    Javascript关于BOM与DOM详解
    css inline元素与inline-block,block元素
    CSS定位
    mysql 8+ 忘记root密码 解决方案
    php 引入其他文件中的变量
    h5 input无法输入问题 屏蔽长按事件
    关于ajax请求status 200 却进入error 回调函数或显示跨域问题的解决方案及原因
    vue 中使用 lazyload 插件 数据更图片不更新 的原因 及解决方案
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_stl_009.html
Copyright © 2011-2022 走看看