STL源码剖析关联容器---map/multimap_一个博客id_新浪博客

前面我们讲到set/multiset 的
key就是数据本身,他们是一样的,STL为了禁止我们对key进行修改,最终采用了红黑树的const_iterator
接下来要学习的map,同样的不允许我们去修改一个key,但是无论是map还是key可以重复的multimap他们的key和data就不是同一回事了,key虽然不能修改但是data允许修改,这里并没有用到const_iterator,而是再对key和map进行pair打包时,->
   pair 
没错是给key加上了const属性。
map源码:
template < class key,   
//key的类型
     
     
   
   class T   ,
   //data的类型
     
     
   
   class compare =
less,  //排序是按key来比较的
     
     
   
   class Alloc = alloc>
class map
{
   public:
     
   
   typedef   key
  key_type;
     
   
   typedef   T
      data_type;
  //从这里可以看出,map的key和对应数据类型是独立的
     
   
   typedef   T
     
mapped_type;
     
   
   typedef  
pair value_type; // 在对key和data进行打包时,赋予key
const属性,所有不能修改
     
      typedef
  compare  
key_compare;  //比较时,是按照可以、来操作的
   private:
     
   
   typedef 
rb_tree ,key_compare,alloc>   rep_type;
     
     
//从这里可以看出,map底层很简单,就是一颗红黑树
     
      rep_type
  t;
public:
     
     
typedef  typename  rep_type ::
iterator  iterator ;
};
select1st:从一坨东西中拿出第一个,即取出pair中的key,是一个函数对象
map中的一个特殊的运算符重载函数:operator[]
operator [] (const key_type &k)
{
  
1.如果对应的key存在,那么就将key对应的数据返回回去
  
2.如果key不存在,会创建这样一个节点出来,并且按照有序的顺序安插到红黑树中。
}
map的key必须是独一无二的,因此当我们调用insert()时,调用了红黑树底层的insert_unique();
而multimap的key是可以重复的,因此我们给multiset中insert()时,实际调用了红黑树的insert_equal();
使用上来讲:

STL源码剖析关联容器---map/multimap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值