map 的底层数据成员
typedef _Rb_tree<key_type, value_type,
_Select1st<value_type>, key_compare, _Alloc> _Rep_type;
//红黑树结构
_Rep_type _M_t; // red-black tree representing map
map 地城通过一个红黑树来维护,对于不可重复的数据map,insert的时候调用insert_unique 来实现,不能插入键相同的元素
insert
pair<iterator,bool> insert(const value_type& __x)
{ return _M_t.insert_unique(__x); }
insert_unique
pair<typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::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<iterator,bool>(_M_insert(__x, __y, __v), true);
else
--__j;
if (_M_key_compare(_S_key(__j._M_node), _KeyOfValue()(__v)))
return pair<iterator,bool>(_M_insert(__x, __y, __v), true);
return pair<iterator,bool>(__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;
}