STL源码剖析-map/multimap容器

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

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

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()){}

template<typename InputIterator>
map(InputIterator first, InputIterator last):t(Compare()){
        // 直接调用rb_tree的insert_unique
        t.insert_unique(first, last);
}

插入函数:

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, 允许插入相同的值。

猜你喜欢

转载自blog.csdn.net/haluoluo211/article/details/80877204