基于红黑树的set,map,multiset,multimap
RB-Tree的源码太难了,先不学...
红黑树有五个特性:
以下四种都是适配器!
set,map的底层实现均为红黑树
multiset和multimap也是基于红黑树,区别就在于可以插入相同的键值
什么时候需要用multiset?
当然是需要用set,但是又允许重复key存在的时候了。
什么时候用set?
需要随时往容器中插入元素,随时对元素进行快速查找,又需要按某种顺序对元素进行遍历的时候.
pair结构体
template <class T1, class T2> // 两个参数类型
struct pair {
typedef T1 first_type;
typedef T2 second_type;
// 定义的两个变量
T1 first;
T2 second;
// 构造函数
pair() : first(T1()), second(T2()) {}
pair(const T1& a, const T2& b) : first(a), second(b) {}
#ifdef __STL_MEMBER_TEMPLATES
template <class U1, class U2>
pair(const pair<U1, U2>& p) : first(p.first), second(p.second) {}
#endif
};
template <class T1, class T2>
inline bool operator==(const pair<T1, T2>& x, const pair<T1, T2>& y) {
return x.first == y.first && x.second == y.second;
}
template <class T1, class T2>
inline bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y) {
return x.first < y.first || (!(y.first < x.first) && x.second < y.second);
}
template <class T1, class T2>
inline pair<T1, T2> make_pair(const T1& x, const T2& y) {
return pair<T1, T2>(x, y);
}
在map中,就用到了pair!
基于哈希表的unordered系列
太复杂了先不学...基于它的都是适配器(配接器)