1. map/multimap 的简介

map 是标准的关联式容器,一个 map 里存储的元素是一个键值对序列,叫做 (key,value) 键值对。它提供基于 key 快速检索数据的能力。

map 中 key 值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。

map 底层的具体实现是采用红黑树变体的平衡二叉树的数据结构。在插入操作、删除和检索操作上比 vector 快很多。

map 可以直接存取 key 所对应的 value,支持[]操作符,如 map[key]=value。

multimap 与 map的区别:map支持唯一键值,每个键只能出现一次;而 multimap 中相同键可以出现多次。multimap 不支持 [ ] 操作符。

一段简单的示例:

 1 #include <iostream>
2 #include <map>
3
4 using namespace std;
5
6 int main()
7 {
8 map<int, string> mapStu;
9 multimap<int, string> multimapStu;
10
11 mapStu.insert(pair<int, string>(1, "mapStu 内容A"));
12 mapStu.insert(pair<int, string>(2, "mapStu 内容B"));
13 mapStu[3] = "mapStu 内容C"; //map 可以通过下标符进行赋值,multimap 不可以这样进行赋值
14
15 multimapStu.insert(pair<int, string>(1, "multimapStu 内容A")); //multimap 支持同 key 插入
16 multimapStu.insert(pair<int, string>(1, "multimapStu 内容B"));
17 //multimapStu[3] = "multimapStu 内容C"; //这样写是会报错的
18
19 for (map<int, string>::iterator it = mapStu.begin(); it != mapStu.end(); it++)
20 {
21 cout << "key: " << (*it).first << " value: " << (*it).second << endl;
22 }
23 cout << endl << "multimap 支持同 key 插入" << endl;
24 for (map<int, string>::iterator it = multimapStu.begin(); it != multimapStu.end(); it++)
25 {
26 cout << "key: " << (*it).first << " value: " << (*it).second << endl;
27 }
28
29 return 0;
30 }

打印结果:

这里还要注意一点,在 map 中,通过 insert 进行已有 kay 的写入,不会对已有 key 的 value 进行覆盖,但使用 [ ] 操作符写入已有 key 会覆盖对应的 value。

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

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

map<T1,T2> mapTT;

multimap<T1,T2>  multimapTT;

如:

map<int, char> mapA;

map<string,float> mapB;

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

3. map和multimap 对象的带参数构造

方式一:map(beg,end);     //将[beg, end)区间中的元素拷贝给本身。

方式二:map(const map &mapObject); //拷贝构造函数。

===========================================================================================================================

STL——容器(Map & multimap)的简述与构造的更多相关文章

  1. STL——容器(Map & multimap)的拷贝构造与赋值

    1. Map & multimap 的拷贝构造与赋值 map(const map &mp);               //拷贝构造函数 map& operator=(con ...

  2. STL:map/multimap用法详解

    map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...

  3. STL之map&multimap使用简介

    map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...

  4. STL容器 -- Map

    核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序. 头文件: #include <map> 拓展: multimap 是一个多重映 ...

  5. STL容器Map

    Map的常见函数 Map的实现机制 STL中的Map底层实现机制是RB树(红-黑树)

  6. 【STL】-Map/Multimap的用法

    初始化: map<string,double> salaries; 算法: 1. 赋值.salaries[ "Pat" ] = 75000.00; 2. 无效的索引将自 ...

  7. STL - 容器 - Map(二)

    把Map用作关联式数组 MapAdvanceTest.cpp #include <map> #include <string> #include <iostream> ...

  8. STL - 容器 - Map(一)

    MapTest.cpp #include <map> #include <string> #include <iostream> #include <algo ...

  9. STL之Map和multimap容器

    1.Map和multimap容器 1)map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. 2)map中key值是唯一的.集合中的元素按一 ...

随机推荐

  1. brctl 增加桥接网卡

    前言 之前有一篇介绍配置桥接网卡的,这个桥接网卡一般是手动做虚拟化的时候会用到,通过修改网卡的配置文件的方式会改变环境的原有的配置,而很多情况,我只是简单的用一下,并且尽量不要把网络搞断了,万一有问题 ...

  2. Windows查找JDK的路径

    第一步:确定是否安装JDK 在控制台输入: java -version 此时说明你电脑安装了JDK. 第二步:查找路径 然后在控制台输入: java -verbose 输出结果: 最后两行就是相应的j ...

  3. nginx 负载均衡设置

    upstream lucky5{ server 127.0.0.1:3000 weight=10; server 127.0.0.1:3001 weight=5; } server{ location ...

  4. kali ms17_010 内网环境下渗透笔记

    一.先用Router Scan 扫描 看清楚了网络拓扑结构. 二.使用MS17-010批量扫描工具 下载:ms17-010Scan.exe  (也可以用kali自带的nmap和ms17-10模块扫) ...

  5. day01-系统基础信息模块

    前言:2015年,由于大规模采用云平台虚拟机部署应用,每套应用系统的MySQl.接口机.WEB服务器.文件服务器需要经常进行版本升级.配置更新.安全补丁加固.iptables调整.配置核实,大量的手工 ...

  6. Mac小白用户都能体验Windows应用的轻量级软件

    近期,苹果在WWDC大会上表示Mac电脑将转向ARM架构,这意味着为iPhone手机.iPad平板和Mac电脑应用APP提供了统一的可能性.也就是说,iPhone手机.iPad平板电脑的应用可能在Ma ...

  7. 详细了解IDM的“计划任务”功能

    今天我们一起来看看IDM下载器的"计划任务"功能. IDM是什么就不多说了,只需要知道它是一个十分好用的资源下载器就行了,下载速度非常快,搭配一些浏览器扩展程序甚至能加速百度盘的下 ...

  8. FL Studio在线面板的作用

    FL Studio的在线面板主要是用来显示其自身与Image-Line公司相关的新闻.我们点击它后会看到一个新闻列表菜单,其中每一个项目都包含日期.标题.简介以及URL.详细的内容我们将在下文介绍,一 ...

  9. Redis多线程原理详解

    本篇文章为你解答一下问题: 0:redis单线程的实现流程是怎样的? 1:redis哪些地方用到了多线程,哪些地方是单线程? 2:redis多线程是怎么实现的? 3:redis多线程是怎么做到无锁的? ...

  10. get、post、

    1.get请求 get请求会把参数放在url后面,中间用?隔开,也可以把参数放在请求body中,如果参数中有中文,http传的时候requests框架会将中文换成urlencode编码 2.get和p ...