C++ STL源码剖析之map、multimap、initializer_list

本文详细探讨了C++ STL中的map和multimap,包括它们的特性和操作,如insert、key不可修改性、以及如何使用initializer_list。map的key-value对中key为const,而multimap允许key重复,插入操作不同。同时,文章介绍了map的[]操作符以及为什么multimap没有此操作符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ STL源码剖析之map、multimap、initializer_list


map/multimap 以rb_tree为底层结构,因此有元素自动排序特点,排序的依据是key。

map/multimap提供"遍历"操作及iterators。按正常规则(++iter)遍历,便能够获得排序状态。

我们无法使用map/multimap的iterators改变元素的key(因为key有其严谨排列规则),但可以用它来改变元素的data。因此map/multimap内部自动将用户指定的key type设定为const,如此便能进制用户对元素key的赋值。

map元素的key必须独立无二,因此其insert使用的是rb_tree的_M_insert_unique(),而multimap元素的key可以重复,因此其insert使用的是rb_tree的_M_insert_equal()。

对于本节,我们将从下面几个内容阐述:

map的key为key,value为key+data,与set是不同的,set是key就是value,value就是key。
map的key不可修改,map与multimap的插入调用函数不同,影响了其key是否对应value。
initializer_list使用
map有[]操作符,而multimap没有[]操作符。

map

key为key,value为key

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源代码大师

赏点狗粮吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值