IT评测·应用市场-qidao123.com
标题:
【C++学习篇】map和set (map篇)
[打印本页]
作者:
兜兜零元
时间:
2024-12-22 06:46
标题:
【C++学习篇】map和set (map篇)
目次
编辑
1.map系列的使用
1.1map和multimap参考文档
1.2map类的介绍
1.3pair类介绍
1.4map的构造
1.5 map的增删查
1.6 map的数据修改
1.7 map 和 multimap的区别
1.map系列的使用
map分为map和multimap
1.1map和multimap参考文档
参考文档
https://legacy.cplusplus.com/reference/map/
1.2map类的介绍
我们上一篇是讲的set是key搜索场景。而本期讲的map,是key/value搜索场景。
map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型(key/value),map默认要求Key⽀持⼩于⽐较,如果不⽀持大概需要的话可以⾃⾏实现仿函数传给第三个模版参数,map底层存储数据的内存是从空间配置器申请的。般环境下,我们都不需要传后两个模版参数。map底层是⽤红⿊树实现,增删查改服从是 O(logN ) ,迭代器遍历是⾛的中序,所以是按key有序顺序遍历的。
1.3pair类介绍
map底层的红⿊树节点中的数据,使⽤pair<Key,T>存储键值对数据。
1.4map的构造
map的⽀持正向和反向迭代遍历,
遍历默认按key的升序顺序,因为底层是⼆叉搜索树
,迭代器遍历⾛的中序;⽀持迭代器就意味着⽀持范围for,
map⽀持修改value数据,不⽀持修改key数据
,修改关键字数据,破坏了底层搜索树的布局。
1.5 map的增删查
map的增删查关注以下⼏个接⼝即可:
map增接⼝,插⼊的pair键值对数据,跟set全部不同,但是查和删的接⼝只⽤关键字key跟set是完全类似的,
不过find返回iterator,不仅仅可以确认key在不在,还找到key映射的value,同时通过迭代还可以修改value.
1.6 map的数据修改
前⾯我提到map⽀持修改mapped_type 数据,不⽀持修改key数据,修改关键字数据,破坏了底层搜索树的布局。
map第⼀个⽀持修改的⽅式时通过迭代器,迭代器遍历时大概find返回key所在的iterator修改,map另有⼀个⾮常紧张的修改接⼝operator[],但是operator[]不仅仅⽀持修改,还⽀持插⼊数据和查找数据,所以他是⼀个多功能复合接⼝。
需要留意
从内部实现⻆度
,map这⾥把我们传统说的value值,给的是T类型
,typedef为mapped_type。⽽value_type是红⿊树结点中存储的pair键值对值。⽇常使⽤我们还是风俗将这⾥的T映射值叫做value。
1.7 map 和 multimap的区别
由于 multimap 答应键冗余,使用 [] 运算符就会出现问题。如果 multimap 支持 [] 运算符,当通过一个已存在的键来使用 [] 时,就不清楚应该修改这个键对应的多个值中的哪一个。比方,有一个 multimap<int, string>,键为整数,值为字符串,键 1 对应了三个字符串 "a"、"b"、"c"。如果使用 [] 运算符像 myMultimap[1] = "d",就无法确定是要修改 "a"、"b" 还是 "c",大概是要举行其他不符合预期的操作。所以,multimap 不支持 [] 运算符,因为如果支持的话,在这种键冗余的环境下,[] 运算符根本上就只能用于插入新的键 - 值对(这与它在 map 中的原有功能不一致),而不能合理地支持修改操作。
本期学习结束,谢谢大家支持!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4