本文共 1388 字,大约阅读时间需要 4 分钟。
typedef _Rb_tree, key_compare, _Alloc> _Rep_type; //红黑树结构 _Rep_type _M_t; // red-black tree representing map
map 地城通过一个红黑树来维护,对于不可重复的数据map,insert的时候调用insert_unique 来实现,不能插入键相同的元素
pairinsert(const value_type& __x) { return _M_t.insert_unique(__x); }
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/