map是C++ STL中非常好用的关联容器,在我们的代码中,可以非常方便的运用下标操作符[]来操作它。
但是搞技术不能浅尝辄止,不仅要会用,还得知道其原理。不过其原理略为复杂,底层实现RB_tree不仅在树形的平衡上表现不错,具有稳定的对数平均时间O(lgn)的表现,在实现复杂度上也是惊人,这就导致了map迭代器的自增,自减,下标操作等非常复杂。
下面是下标操作符的实际操作:
template <class Key, class T,
class Compare = less<Key>,
class Alloc = alloc>
class map {
public:
// typedefs:
typedef Key key_type; //键值型别
//map元素类型
typedef pair<const Key& T> value_type;
...
public:
T& operator[](const key_type& k) {
return (*((insert(value_type(k,T()))).first)).second;
}
...
};
(*((insert(value_type(k,T()))).first)).second
这段代码看起来真是恐怖,别急,拆解来看就很容易了。
先看第一步