标准的关联式容器

键值对序列

基于key的快速检索能力

key按序排列,按序插入

红黑树变体的平衡二叉树

对key来说支持 mapT[key] 和 mapT.at(key)

multimap 不支持 multimapT[key] 和 multimapT.at(key)

A、头尾 添加/移除

B、随机存取

C、数据存取

1、构造函数

  1.1、默认构造函数 ==> 无参构造函数

  1.2、必定需要 复制构造函数 :map<T1,T2> mapTT(const map<T1,T2>& mapTT02);

2、赋值

  2.1、重载"="操作符

      map& = const map& map1;

3、迭代器操作

  3.1、const_iterator map<T>::begin();  // 第1个

  3.2、const_iterator map<T>::end();  // 最后1个

  3.3、const_reverse_iterator map<T>::rbegin();  // 倒数第1个

  3.4、const_reverse_iterator map<T>::rend();  // 倒数最后1个

4、插入

  4.1、std::pair<map<T1,T2>::iterator, bool> pairA = map::insert(pair<T1,T2>(key, value));

  4.2、std::pair<map<T1,T2>::iterator, bool> pairB = map::insert(map<T1,T2>::value_type(key, value));

  4.3、mapTT[key1] = value1;  性能问题

    先查找有无主键为 key1的项

     --> 无

       --> 新建 主键为key1 值为value1 的项  初始化值的对组,插入map中

     --> 有

       --> 原来的 mapTT[key1] ,将值改为 value1

5、删除

  void map::clear();
  iterator map::erase(const_iterator beg, const_iterator end); // [beg, end)区间,返回下一个元素的位置
  iterator map::erase(const_iterator pos);           // 返回下一个元素的位置

  size_type map::erase(key_type keyElem);  // 删除 容器中 key为keyElem的对组。返回的是删掉的个数?

6、交换

  void map<T>::swap(map<T>&);

7、大小

  size_type map<T>::size();
  bool map<T>::empty();

8、查找

  iterator map::find(key);  // 查找key是否存在。存在:返回元素迭代器;不存在:返回map::end()

  size_type map::count(key_type keyElem);  // 返回容器中key为keyElem的对组个数

  iterator map::lower_bound(key_type keyElem);  // 返回第一个key>=keyElem元素的迭代器

  iterator map::upper_bound(key_type keyElem);  // 返回第一个key>keyElem元素的迭代器

  std::pair<map<T1,T2>::iterator, map<T1,T2>::iterator> pair01 = mapTT.equal_range(key_type keyElem); // 返回容器中 key为keyElem的区间。上限是闭区间,下限是开区间。如[beg, end)

map/multimap_01的更多相关文章

  1. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  2. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  3. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  4. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  5. 多用多学之Java中的Set,List,Map

            很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...

  6. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  7. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

  8. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

  9. MapReduce剖析笔记之五:Map与Reduce任务分配过程

    在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...

随机推荐

  1. 神经网络前向后向传播(理论推导+代码) 单层神经网络相当于logistic regression

    建立神经网络的主要步骤是: 1. 定义模型结构(例如输入特征的数量) 2. 初始化模型的参数 3. 循环: # 3.1 计算当前损失(正向传播) # 3.2 计算当前梯度(反向传播) # 3.3 更新 ...

  2. DW课堂练习 用所学的知识去制作一个 (邮箱的注册页面)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. php7安装memchced扩展

    tar -zxvf memcached-3.0.3.tgz cd memcached-3.0.3 phpize yum install libmemcached libmemcached-dev ./ ...

  4. 搭建Linux-java web运行环境之一:安装jdk+tomcat

    环境 OS:Red Hat Enterprise Linux Server release 7.3 (Maipo) JDK:jdk-7u80-linux-x64.tar.gz Tomcat:apach ...

  5. Go语言初尝

    对于语言设计之争, 唯一需要牢记的一句话是: 如果把 C 变成 C++, 那么 C 就消失了. Go 是一个轻量级的简洁的支持并发的现代语言,  可以用于探索性个人项目, 这是我想学这门语言的主要原因 ...

  6. python isinstance()与type()的区别

    例如在继承上的区别: isinstance() 会认为子类是一种父类类型,考虑继承关系. type() 不会认为子类是一种父类类型,不考虑继承关系. class A: pass class B(A): ...

  7. MYSQL的存储过程和函数简单写法

    存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] ro ...

  8. Linux Touch命令的8种使用技巧

    Linux touch命令不仅可以用于在Linux上创建空文件. 您可以使用它来更改现有文件的时间戳,包括其访问权限和修改时间. 本文介绍了8种可以通过Linux终端使用touch命令的方案. 我们在 ...

  9. P2571 [SCOI2010]传送带

    P2571 [SCOI2010]传送带 三分套三分. 前提条件:P3382 [模板]三分法 三分,求区间内单峰函数的最大/最小值. 我们把两条线段都跑三分,先ab后cd,求出最小值. 可以直接将二维坐 ...

  10. 20145328 《网络对抗技术》MSF基础应用

    20145328 <网络对抗技术>MSF基础应用 --------------先提交,后续完成------------------