一,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不支持[]操作符。
  • 要使用map必须要引入头文件# include<map>

二,map和multimap的基本操作

1.map和multimap的构造函数

  1. // map的无参构造函数
  2. map<string,string> m1;
  3. // multimap的无参构造函数
  4. multimap<string, string> m2;

2.map的插入操作

  1. # include<iostream>
  2. # include<map>
  3. # include<string>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. // 定义map集合
  9. map<string, string> m;
  10. // 插入方式1,返回结果是是否插入成功
  11. pair<map<string,string>::iterator,bool> p1 = m.insert(pair<string, string>("Epic", "UnrealEngine"));
  12. // 插入方式2,返回结果是是否插入成功
  13. pair<map<string, string>::iterator, bool> p2 = m.insert(make_pair("Unity", "Unity3D"));
  14. // 插入方式3,返回结果是是否插入成功
  15. pair<map<string, string>::iterator, bool> p3 = m.insert(map<string, string>::value_type("Oracle", "Java"));
  16. // 插入方式4
  17. m["nokia"] = "Qt";
  18. // 插入方式4可以修改值
  19. m["nokia"] = "NewQt";
  20. // 遍历
  21. for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
  22. {
  23. cout << it->first << " = " << it->second << endl;
  24. }
  25.  
  26. return ;
  27. }

3.map的遍历操作

  1. # include<iostream>
  2. # include<map>
  3. # include<string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. // 创建映射
  10. map<string, string> m;
  11.  
  12. // 插入元素
  13. m.insert(make_pair("王刚","张文婧"));
  14. m.insert(make_pair("吕布", "貂蝉"));
  15. m.insert(make_pair("刘备", "孙尚香"));
  16.  
  17. // 正向遍历
  18. for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
  19. {
  20. cout << it->first << " = " << it->second << endl;
  21. }
  22.  
  23. // 反向遍历
  24. for (map<string, string>::reverse_iterator it = m.rbegin(); it != m.rend(); it++)
  25. {
  26. cout << it->first << " = " << it->second << endl;
  27. }
  28.  
  29. return ;
  30. }

4.map的删除操作

  1. # include<iostream>
  2. # include<map>
  3. # include<string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. // 创建映射
  10. map<string, string> m;
  11. // 插入元素
  12. m.insert(make_pair("刘备1", "孙尚香1"));
  13. m.insert(make_pair("刘备2", "孙尚香2"));
  14. m.insert(make_pair("刘备3", "孙尚香3"));
  15. m.insert(make_pair("刘备4", "孙尚香4"));
  16. m.insert(make_pair("刘备5", "孙尚香5"));
  17. // 删除刘备4
  18. for (map<string, string>::iterator it = m.begin(); it != m.end(); )
  19. {
  20. if (it->first == "刘备4")
  21. {
  22. it = m.erase(it);
  23. }
  24. else {
  25. it++;
  26. }
  27. }
  28. // 遍历
  29. for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
  30. {
  31. cout << it->first << " = " << it->second << endl;
  32. }
  33. // 获取map的长度
  34. int size = m.size();
  35. cout << "size = " << size << endl;
  36. // 清空map
  37. m.clear();
  38. size = m.size();
  39. cout << "size = " << size << endl;
  40.  
  41. return ;
  42. }

5.map的其他操作

  1. # include<iostream>
  2. # include<map>
  3. # include<string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. map<string, string> m;
  10. /* 插入操作 */
  11. m.insert(make_pair("aaa", "AAA"));
  12. m.insert(make_pair("bbb", "BBB"));
  13. m.insert(make_pair("ccc", "CCC"));
  14. /* 统计,map的的可能结果为0或者1,multimap的结果是可能多变的 */
  15. int s = m.count("aaa");
  16. cout << "s = " << s << endl;
  17. /* 查找,根据key来查找,返回该key的迭代器 */
  18. map<string,string>::iterator it = m.find("aaa");
  19. cout << it->first << " = " << it->second << endl;
  20.  
  21. return ;
  22. }

STL关联式容器之map和multimap的更多相关文章

  1. STL关联式容器之set\map ----以STL源码为例

    关联式容器的特征:所用元素都会根据元素的键值自动被排序. set STL 中的关联式容器低层数据结构为红黑树,其功能都是调用低层数据结构中提供的相应接口. set元的元素不会像map那样同时拥有键(k ...

  2. STL关联式容器之set和multiset

    一,set和multiset的基础知识 1.set和multiset的基础 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按照一定的顺序排列,元素插入过程是按照排序规则插入的.所以不能指 ...

  3. STL序列式容器之list

    一,list容器基本概念 1.list容器基本知识 list容器的底部数据结构为双向链表,可以高效的进行插入和删除元素. list因为底层数据结构是双向链表,因此不支持下标操作和.at()函数的操作. ...

  4. [知识点]C++中STL容器之map

    UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...

  5. STL——关联式容器

    一.关联式容器 标准的STL关联式容器分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和 multimap(多键映射表).这些容器的底层机制均以RB-tre ...

  6. iBinary C++STL模板库关联容器之map/multimap

    目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...

  7. C++ 序列式容器之vector

     什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array,  链表list,  树tree ...

  8. STL学习系列九:Map和multimap容器

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

  9. C++ STL 学习笔记__(8)map和multimap容器

    10.2.9 Map和multimap容器 map/multimap的简介 ²  map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. ² ...

随机推荐

  1. 数据结构-堆实现优先队列(java)

    队列的特点是先进先出.通常都把队列比喻成排队买东西,大家都非常守秩序,先排队的人就先买东西. 可是优先队列有所不同,它不遵循先进先出的规则,而是依据队列中元素的优先权,优先权最大的先被取出. 这就非常 ...

  2. [arm]虚拟机,2440开发板,主机三者互通

    想实现3着互通先必须保证三者的网段是相同的: 首先查看电脑主机的IP: 然后再看看虚拟机的IP: 惊喜的发现,他们在一个网段上---那就不用改了-- 再去看看开发板上的IP: 这里注意,输入命令时,是 ...

  3. Understanding Cubert Concepts(一)Partitioned Blocks

    Understanding Cubert Concepts(一)Partitioned Blocks Cubert Concepts 对于Cubert,我们要理解其核心的一些概念,比方BLOCK.这些 ...

  4. 【u248】交通序列号

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在一条笔直的道路上共有N个路口,每个路口处都有关于该条道路的通行的信号灯. 显然,信号灯共有绿(G). ...

  5. error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

    rsguo:SECONDARY> db.users.find();error: { "$err" : "not master and slaveOk=false&q ...

  6. 【u123】最大子段和

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给出一段序列,选出其中连续且非空的一段使得这段和最大. [输入格式] 输入文件maxsum1.in的第 ...

  7. acdream 1430 SETI 后缀数组+height分组

    这题昨天比赛的时候逗了,后缀想不出来,由于n^2的T了,就没往后缀数组想--并且之后解题的人又说用二分套二分来做.然后就更不会了-- 刚才看了题解,唉--原来题讲解n^2的也能够过,然后就--这样了! ...

  8. AngularJS之watch

    简介 首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法. 在digest执行时,如果watch观察的的value与上一次执 ...

  9. HDU 5044 Tree(树链剖分)

    HDU 5044 Tree field=problem&key=2014+ACM%2FICPC+Asia+Regional+Shanghai+Online&source=1&s ...

  10. MONyog使用图解(一)-数据库性能监控工具

    原文:MONyog使用图解(一)-数据库性能监控工具 一.安装步骤 较为简单,网上可以搜索到,此处不做详细说明. 二.使用图解 此处介绍监控数据库连接量.并发量.吞吐量.响应时间等功能 1.设置连接需 ...