首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >STL源码剖析-map/multimap容器

STL源码剖析-map/multimap容器

作者头像
bear_fish
发布于 2018-09-14 09:42:00
发布于 2018-09-14 09:42:00
9850
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1338318

本文主要简易分析STL-SGI的map源码分析。

在map中对于rb_tree(源码分析)而言key, value不一样,key用于rb_tree排序,pair<key, value>才是rb_tree的节点,同样成员就一个rb_tree足已表现整个map:

代码语言:javascript
复制
template <typename Key, typename Value, class Compare = std::less<Key>>
class map{
    // 用于re_tree排序
    typedef Key    key_type;
    // rb_tree节点的value
    typedef std::pair<key_type, value_type> value_type;

    typedef Compare key_compare;

    // 对于map而言,Key, Value类型不一样,一个排序,另一个节点实值
    typedef rb_tree1<key_type, value_type, key_compare> rep_type;

    // map的成员变量
    rep_type t;
};

构造函数:

map():t(Compare()){}

代码语言:javascript
复制
template<typename InputIterator>
map(InputIterator first, InputIterator last):t(Compare()){
        // 直接调用rb_tree的insert_unique
        t.insert_unique(first, last);
}

插入函数:

代码语言:javascript
复制
typedef typename rep_type::const_iterator iterator;
std::pair<iterator, bool> insert(const value_type& v){
    return t.insert_unique(v);
};

基本都是调用rb_tree的底层操作函数。

定义和multimap容器和map基本相同,只不过插入调用的是函数:insert_equal, 允许插入相同的值。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月01日,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档