map

C++ STL中封装的一种关联式容器,里面存储的是键值对类型,在数据查询中效率较高。

什么是键值对
键值对是一种一一对应的关系,<key,value>结构,第一个为关键字,第二个为关键字的值,例如:在词典中我们可以通过汉语,查具体的英文单词,查单词的操作就是一一对应的关系,<苹果,Apple>,苹果就相当于key,Apple就相当于value。

键值对的创建方法:pair<T1,T2> (key,value)

注意:一一对应,则表示key值唯一,由于map底层封装了搜索二叉树,所以对其进行遍历可得到有序数列

map的接口

构造

由于比较方式与配置器不需要给出,所以我们构造函数写起来就相对简单一点。

构造函数 接口
map<T1,T2> m1 T1为key的类型,T2为value的类型,其值可以不同
map<T1,T2> m2(m1) 拷贝构造
map<T1,T2> m3 = m2 赋值构造


注意:map的拷贝构造与赋值构造是浅拷贝

迭代器

接口 接口说明
begin 返回第一个元素的位置
end 返回最后一个元素的下一个位置
rbegin 反向迭代器,返回最后一个元素的下一个位置
rend 反向迭代器,返回第一个元素的位置

容量操作

接口 接口说明
max_size 最大容量,类似于capacity
empty 判空操作
size 有效元素的个数

注意:容量操作都是返回key值的个数

元素修改操作

接口 接口说明
insert(kay,value) 插入操作
insert(it,key,value) 在it的位置插入键值对
insert [begin,end) 区间构造
erase(const key& x) 删除操作,删除key等于x的元素
swap 交换两个map中的元素
clear 清空map中元素
find(const key& x) 查找key为x的元素,找到返回位置迭代器,未找到返回end迭代器
count(const key& x) 返回key为x元素的个数,0或1,主要是用于检测map中是否有key
operator[ ] 随机访问方式的重载,如果元素存在,则返回下标,不存在,则插入元素
at 元素访问操作,如果元素不存在,返回异常
int main()
{std::map<char, int> mymap; //构造// 使用insert插入元素,pair<T1,T2>(key,value)创建键值对mymap.insert(std::pair<char, int>('a', 100));mymap.insert(std::pair<char, int>('z', 200));std::pair<std::map<char, int>::iterator, bool> ret;ret = mymap.insert(std::pair<char, int>('z', 500));if (ret.second == false) {std::cout << "element 'z' already existed";std::cout << " with a value of " << ret.first->second << '\n';}// 在it的位置插入键值对std::map<char, int>::iterator it = mymap.begin();mymap.insert(it, std::pair<char, int>('b', 300));  // max efficiency insertingmymap.insert(it, std::pair<char, int>('c', 400));  // no max efficiency inserting// 区间构造,同时使用find查找std::map<char, int> anothermap;anothermap.insert(mymap.begin(), mymap.find('c'));// 使用迭代器打印std::cout << "mymap contains:\n";for (it = mymap.begin(); it != mymap.end(); ++it)std::cout << it->first << " => " << it->second << '\n';std::cout << "anothermap contains:\n";for (it = anothermap.begin(); it != anothermap.end(); ++it)std::cout << it->first << " => " << it->second << '\n';//将mymap与anothermap进行交换mymap.swap(anothermap);//反向迭代器的使用std::cout << "mymap contains:\n";std::map<char, int>::reverse_iterator rit;for (rit = mymap.rbegin(); rit != mymap.rend(); ++rit)std::cout << it->first << " => " << it->second << '\n';std::cout << mymap.count('a') << std::endl;std::cout << mymap.size() << std::endl;std::cout << mymap.max_size() ;//删除key == a的元素mymap.erase('a');system("pause");return 0;
}

multimap

multip和map的唯一区别就是:map中的key唯一(不能重复)。multimap中的key是可以重复的

特征:
  1. mutilmap的key是可以重复的。
  2. multimap元素是按照小于进行排列。

基本的接口与map相类似,头文件和map头文件相同。

C++---map/multimap用法介绍相关推荐

  1. C++ STL容器 —— map/multimap 用法详解

    C++ STL容器 -- map/multimap 用法详解 写在前面:近期正在学习C++的STL容器,因此在这里做一下日志记录,主要介绍一些容器基本成员函数的用法, 配上实际用例,并不涉及原理.但别 ...

  2. map/multimap用法详解

    multimap 类 标准模板库多重映射类用于存储和检索集合中的数据,此集合中的每个元素均为包含数据值和排序键的元素对. 键值不需要唯一,用于自动排序数据. 可以直接更改多重映射中的元素值,但不能直接 ...

  3. [C++STL]map容器用法介绍

    代码如下: #include <iostream> #include <string> #include <map> using namespace std;voi ...

  4. std的list, vector, map,multimap, set 区别与用法比较

    List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector对于随机 ...

  5. STL详解(十)—— set、map、multiset、multimap的介绍及使用

    文章目录 关联式容器 树形结构与哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的插入 map的查找 map的删 ...

  6. 【 C++ 】map、multimap的介绍和使用

    目录 1.map map的介绍 map的定义 insert插入函数 map的迭代器 [ ]运算符重载 find查找函数 erase删除函数 其它函数 总结 2.multimap multimap的介绍 ...

  7. map函数作用c语言,c语言中map的用法:map基本用法

    c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...

  8. set/multiset/unordered_set和map/multimap/unordered_map基础汇总

    引言 在STL中,有两种很常见的关联容器,分别是set和map,序列容器的元素是按照在容器中的位置来顺序保存和访问的,而关联容器的元素是按关键元素来保存和访问的.所以关联容器经常用在关键字的查找中,效 ...

  9. 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】

    [C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...

最新文章

  1. ubuntu 使用ccache加快linux内核编译速度
  2. HttpClient 实现爬取百度搜索结果(自动翻页)
  3. Pandas系列(十四)数据转换函数map、apply、applymap以及分组apply
  4. 关于Java字符串的几个重点
  5. eclipse、EditPlus等编辑器选中列(块)的方法
  6. 2019测试学习路线图,内附完整自学路线+视频+工具
  7. cad插入块_CAD施工制图常见问答(一)
  8. 统计学中sp_统计学中的F值、P值和r分别表示什么意思,怎么求
  9. python distribute包管理工具安装AttributeError错误
  10. 你还记得当年上课天天玩 JAVA游戏吗
  11. 基于android的五子棋开发
  12. elasticsearch学习 part4
  13. 如何给电脑硬盘分区?
  14. 风控模型中的KS-指标
  15. php 文件预览 水印,PHP图片上传,预览图上传,水印设置
  16. 关于植物大战僵尸如何更改关卡与金币
  17. 后端:静态资源放在cdn cdn涵义 cdn加载
  18. 美丽天天秒系统开发模式与美丽天天秒系统源码分享
  19. [Python][爬虫04]Fiddler与HTTP请求:抓取豆瓣评分以及资源链接(一)
  20. NeuroImage:经颅直流电刺激(tDCS)如何影响脑功能连接?

热门文章

  1. UVa 1592 数据库
  2. 记Hadoop HA高可用性分布式集群搭建过程
  3. commons-fileupload 的详细介绍与使用
  4. QEMU 源代码阅读经验开山之作
  5. RH413-Linux系统下的SUID文件权限测试
  6. MS DOS 命令大全
  7. iphone pageController 的实现
  8. 如何让开关打开_汽车油箱盖如何打开?老司机:不外乎这三种方式
  9. 【工程项目经验】github定位到历史版本(历史commit点)
  10. SpringSecurity-1-前言,登录原理