版权声明:本文为博主原创文章,未经博主允许不得转载。 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
:
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, 允许插入相同的值。