源代码来自sgi-2.91版本stl_map.h
文章目录
map总览
(1)map的底层实现实际上是一颗红黑树实现,从实现原理讲,map又被称为容器适配器
(2)每次插入元素会调整红黑树位置,实现自动排序
(3)key和data是组成一个pair<T,T>值,作为红黑树的value
(4)不能插入相同元素值
(5)不能修改key,但是可以修改data
map类
#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
template <class Key, class T, class Compare = less<Key>, class Alloc = alloc> //默认比较函数是less<Key>,内存分配器是alloc
#else
template <class Key, class T, class Compare, class Alloc = alloc> //自己选择参数
#endif
class map {
public:
// typedefs:
//类型申明
typedef Key key_type;
typedef T data_type;
typedef T mapped_type;
typedef pair<const Key, T> value_type; //注意此处const key,所以说map的key键不能更改
typedef Compare key_compare;
class value_compare //比较函数的类
: public binary_function<value_type, value_type, bool> {
friend class map<Key, T, Compare, Alloc>;
protected :
Compare comp;
value_compare(Compare c) : comp(c) {
}
public:
bool operator()(const value_type& x, const value_type& y) const {
return comp(x.first, y.first); //注意此处,作比较时只比较key
}
};
private:
typedef rb_tree<key_type, value_type,
select1st<value_type>, key_compare, Alloc> rep_type; //树的参数与map参数一致
rep_type t; // red-black tree representing map t就是一颗红黑树
public:
//下面全是调用t的接口
typedef typename rep_type::pointer pointer;
typedef typename rep_type::const_pointer const_pointer;
typedef typename rep_type::reference reference;
typedef typename rep_type::const_reference const_reference;
typedef typename rep_type::iterator iterator;
typedef typename rep_type::const_iterator const_iterator;
typedef typename rep_type::reverse_iterator reverse_iterator;
typedef typename rep_type::const_reverse_iterator const_reverse_iterator;
typedef typename rep_type::size_type size_type;
typedef typename rep_type::difference_type difference_type;
map构造函数
map() : t(Compare()) {
}
explicit map(const Compare& comp) : t(comp) {
}
map(const value_type* first, const value_type* last)
: t(Compare()) {
t.