博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【STL源码分析】map
阅读量:3942 次
发布时间:2019-05-24

本文共 1388 字,大约阅读时间需要 4 分钟。

文章目录

map 的底层数据成员

typedef _Rb_tree
, key_compare, _Alloc> _Rep_type; //红黑树结构 _Rep_type _M_t; // red-black tree representing map

map 地城通过一个红黑树来维护,对于不可重复的数据map,insert的时候调用insert_unique 来实现,不能插入键相同的元素

insert

pair
insert(const value_type& __x) {
return _M_t.insert_unique(__x); }

insert_unique

pair
::iterator, bool>_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc> ::insert_unique(const _Value& __v){
_Link_type __y = _M_header; _Link_type __x = _M_root(); bool __comp = true; //查找插入的位置 while (__x != 0) {
__y = __x; __comp = _M_key_compare(_KeyOfValue()(__v), _S_key(__x)); __x = __comp ? _S_left(__x) : _S_right(__x); } iterator __j = iterator(__y); //插入之后对节点进行调整,使其满足红黑树的性质 if (__comp) if (__j == begin()) return pair
(_M_insert(__x, __y, __v), true); else --__j; if (_M_key_compare(_S_key(__j._M_node), _KeyOfValue()(__v))) return pair
(_M_insert(__x, __y, __v), true); return pair
(__j, false);}

[] 运算符重载函数

_Tp& operator[](const key_type& __k) {
//首先查找__k 是否已经存在 iterator __i = lower_bound(__k); // __i->first is greater than or equivalent to __k. //如果__k 不存在 ,直接插入一个__key ,值为_Tp()默认值 if (__i == end() || key_comp()(__k, (*__i).first)) __i = insert(__i, value_type(__k, _Tp())); // return (*__i).second; }

转载地址:http://uonwi.baihongyu.com/

你可能感兴趣的文章
非starter方式实现springboot与shiro集成
查看>>
Starter方式实现Springboot与Shiro集成
查看>>
移动端多页面应用(MPA)的开发(一)
查看>>
移动端多页面应用(MPA)的开发(二)
查看>>
移动端多页面应用(MPA)的开发(三)
查看>>
移动端多页面APP(MPA)开发体验
查看>>
基于深度学习知识追踪研究进展(综述)数据集模型方法
查看>>
linux常见命令与FileZilla
查看>>
PostgreSQL和ElasticSearch学习笔记
查看>>
java反射
查看>>
paint 和 paintcomponent的区别
查看>>
JSP字节码的存放路径问题
查看>>
对RMQ的理解
查看>>
LCA的离线算法
查看>>
spark学习与资料
查看>>
Java_SSM问题
查看>>
sql-数据库操作
查看>>
推荐CTR预估-几个基础模型FM \FFM\GBDT+LR
查看>>
推荐系统基础
查看>>
redis
查看>>