红黑树和AVL树封装map和set的细节 以及 map的operator[]重载的底层
1.map中的insert
map的insert统一是 pair<iterator, bool> insert(const pair<K,V>& kv)
红黑树的insert是 pair<iterator, bool> insert(const T& data),节点的数据是 pair<K,V>
AVL树的insert是 pair<iterator, bool> insert(const K& key, const V& value),节点的数据是 pair<K,V>
2..set中的insert
set的insert统一是 pair<iterator, bool> insert(const K& key)
红黑树的insert是 pair<iterator, bool> insert(const T& data),节点的数据是 K
AVL树的insert是 pair<iterator, bool> insert(const K& key, const V& value),节点的数据是 pair<K,K>
归根结底是由于AVL树和红黑树底层节点的数据存储类型不一样,红黑树是T,AVL树是pair<K,V>
3.map的operator[ ]重载
底层就是先调 insert,insert插入传入的key和默认的V()组成的pair,然后用insert返回的pair<iterator,bool>, 利用迭代器返回节点里数据pair<K,V>的V的引用