map/multimap基本概念

  1. Map的特性是,所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值
  2. 我们可以通过map的i迭代器改变mao的键值吗?答案是不行,因为map的键值关系到map元素的排列规则,任意改变map键值会严重破坏map的组织,如果想要修改元素的实值,是可以的
  3. Map和list拥有相同的某些性质,当对它的容器元素进行新增操作或者删除操作时,操作之前的所有迭代器,在操作完成之后依然有效,当然被删除的那个元素的迭代器必然是个例外
  4. Multimap和map的操作类似,唯一区别multimap的键值可以重复
  5. map和multimap都是以红黑树为底层实现机制

map 对象的拷贝构造与赋值

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

map 的大小操作

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

map 的删除操作

  1. map.clear(); //删除所有元素  map.erase(pos);//删除 pos 迭代器所指的元素,返回下一个元素的迭代器。
  2. map.erase(beg,end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
  3. map.erase(keyElem); //删除容器中 key 为 keyElem 的对组。
  void test02(){map<int, int>m;m.insert(pair<int, int>(1, 10));m.insert(make_pair(2, 20));m.insert(map<int, int>::value_type(3, 30));m[4] = 40;m.erase(1);for (map<int, int >::iterator it = m.begin(); it != m.end(); it++){cout << "key=" << it->first << "value" << it->second << endl;}map<int,int>::iterator pos=m.find(2);if (pos != m.end()){cout << "找到,key值为:" << pos->first << "value" << pos->second << endl;}else{cout << "未找到" << endl;}int num=m.count(3);//map的count要么0要么1cout << "num=" << num << endl;//lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器map<int, int>::iterator ret = m.lower_bound(3);if (ret != m.end()){cout << "lower_bound中key" << ret->first << "value" << ret->second << endl;}else{cout << "未找到" << endl;}//upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器ret = m.upper_bound(3);if (ret != m.end()){cout << "upper_bound中key" << ret->first << "value" << ret->second << endl;}else{cout << "未找到" << endl;}pair<map<int,int>::iterator,map<int,int>::iterator>ret2= m.equal_range(3);if (ret2.first != m.end()){cout << "找到了equal_range中的lower_bound的key" << ret2.first->first << "value" << ret2.first->second << endl;}else{cout << "未找到" << endl;}if (ret2.second != m.end()){cout << "找到了equal_range中的upper_bound的key" << ret2.second->first << "value" << ret2.second->second << endl;}else{cout << "未找到" << endl;}}

map 的查找操作

  1. map.find(key); 查找键 key 是否存在,若存在,返回该键的元素的迭代器;若不存 在,返回 map.end();
  2. map.count(keyElem); //返回容器中 key 为 keyElem 的对组个数。对 map 来说,要 么是 0,要么是 1。对 multimap 来说,值可能大于 1。

map 的插入与迭代器

  1. map.insert(…); //往容器插入元素,返回 pair<iterator,bool>
  2. 在 map 中插入元素的三种方式: 假设 map<int,string>mapStu;
  3. 通过 pair 的方式插入对象 mapStu.insert( pair<int,string>(3,“小张”) );
  4. 通过 pair 的方式插入对象 mapStu.inset(make_pair(-1,“校长-1”));
  5. 通过 value_type 的方式插入对象 mapStu.insert( map<int,string>::value_type(1,“小李”) );
  6. 通过数组的方式插入值 mapStu[3]=“小刘"; mapStu[5]=“小王";
   void test01(){map<int, int>m;//插入值//4种方式//第一种m.insert(pair<int, int>(1, 10));//第二种m.insert(make_pair(2, 20));//第三种m.insert(map<int, int>::value_type(3, 30));//第四种 如果保证key存在,可以通过这种方式访问m[4] = 40;for (map<int, int >::iterator it = m.begin(); it != m.end(); it++){cout << "key=" << it->first << "value" << it->second << endl;}if (m.empty()){cout << "空" << endl;}else{cout << "size=" << m.size() << endl;}}

注意

  1. 前三种方法,采用的是 insert()方法,该方法返回值为 pair<iterator,bool>
  2. 第四种方法非常直观,但存在一个性能的问题。插入 3 时,先在 mapStu 中查找主 键为 3 的项,若没发现,则将一个键为 3,值为初始化值的对组插入到 mapStu 中, 然后再将值修改成“小刘”。若发现已存在 3 这个键,则修改这个键对应的 value
  3. stringstrName=mapStu[2]; //取操作或插入操作
  4. 只有当 mapStu 存在 2 这个键时才是正确的取操作,否则会自动插入一个实例,键 为 2,值为初始化值。
  //指定排序规则class myCompare{public:bool operator()(int v1, int v2){return v1 > v2;}};void test03(){//从大到小排序map<int, int,myCompare>m;m.insert(pair<int, int>(1, 10));m.insert(make_pair(2, 20));m.insert(map<int, int>::value_type(3, 30));m[4] = 40;for (map<int, int, myCompare>::iterator it = m.begin(); it != m.end(); it++){cout << "key:" << it->first << "value:" << it->second << endl;}}

c++中的map容器相关推荐

  1. C++STL库中的map容器

    map简介 map是STL中的一个关联式的容器,可以建立key(first)和value(second)一对一的联系,由key映射到value. map内部自建了一棵红黑二叉树,可以对数据进行自动排序 ...

  2. C++中map容器的说明和使用技巧

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 1   头文件 #include <map> 2   定义 map< ...

  3. leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)

    文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...

  4. 【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map

    @Author:Runsen STL 中的栈容器是一种容器适配器.在栈容器中,元素在一端插入并在同一端删除. stack 为了实现堆栈容器,我们需要在我们的程序中包含头文件<stack>. ...

  5. map容器中删除一个元素(value)

    一:问题描述 我们想要删除map容器中,一个key值对应的vlaue 二:上码 #include<iostream> #include<map> #include<vec ...

  6. C++ 中 map 容器的内存释放机制及内存碎片管理

    C++ 中 map 容器的内存释放机制及内存碎片管理 C++ 中的容器很好用,比如 vector, map 等,可以动态扩容,自己管理内存,不用用户关心,但是在某些极端情况下,如果内存比较紧张的情况下 ...

  7. 聊聊 SpringCloud 中的父子容器

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 来源公号:吉姆餐厅ak 概述 在引入 SpringCloud 的项目中会多次创建 Spring 容 ...

  8. STL中的map、unordered_map、hash_map

    转自https://blog.csdn.net/liumou111/article/details/49252645 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于 ...

  9. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

最新文章

  1. vector容器中erase(删除)的使用
  2. HDOJ 2012 素数判定 解题报告
  3. 学习笔记Hadoop(一)—— Hadoop介绍(1)——认识大数据
  4. SAP UI5 OData库的_getServiceSchemaVersion
  5. python pexpect timeout_Python 的 pexpect 模块的问题
  6. mapinfo图层导入奥维_(通信技能分享)怎样把谷歌地球上画的路线图导入到测试软件中!...
  7. 线性表——顺序表的应用
  8. 我的docker随笔18:阿里云docker仓库的使用
  9. pytorch学习笔记(五):线性回归的简洁实现
  10. 全国计算机vfp是什么,计算机二级VFP数据库简介
  11. 2021年中国鱼油发展现状及进出口状况分析:我国鱼油需求进一步扩大 [图]
  12. 上海车牌拍卖突破7.5万元
  13. 【CSDN软件工程师能力认证学习精选】Web前端经典面试试题及答案-史上最全前端面试题(含答案)
  14. [Python嗯~机器学习]---用python3来分析和预测加州房价
  15. 深入理解计算机系统(CSAPP) 实验详解:DataLab
  16. 测试容器网络带宽,限制容器对内存,对CPU的使用
  17. 使用老毛桃U盘给联想G400装系统
  18. java基于ssm开发的电视剧播放视频系统页面很漂亮哦
  19. python 匿名回调函数_Python面试题之回调函数
  20. DNS BIND 搭建域名智能解析DNS服务器之IP地址归类(ACL)

热门文章

  1. mybatis 使用merge into
  2. hiho1257 Snake Carpet
  3. (转)MOMO的Unity3D研究院之深入理解Unity脚本的执行顺序(六十二)
  4. echo 12345678 | base64 产生的结果跟12345678真正的base64编码不对
  5. java动态拼接请求_在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案...
  6. java thread isalive_Java线程编程中isAlive()和join()的使用详解
  7. oracle精确匹配时间,Oracle时间精确到时、分、秒处理方法
  8. 记录程序写入日志_终于有人把MySQL 三大日志讲清楚了
  9. android 勿扰模式代码,Android N Zen Mode (勿扰模式)设置流程
  10. php中mysqlstat函数,PHP函数mysql_stat介绍