STL容器一览
list:双向链表,没有排序
vector:数组,没有排序
deque:双端容器
map:红黑树,按key排序
multimap:允许重复键值的红黑树
set:排序,不允许重复键值的红黑树
multiset:排序,允许重复键值的红黑树
基于各种容器的内部实现原理,可以比较好的理解他们之间函数的差异:
STL容器相关的其他主要对象
pair
pair是一个值对,first和second可以是不同的类型,一般用来表示map的一个节点。
pair<int, char> p;
p.first = 1;
p.second = 'a';
iterator
迭代器用来遍历一个容器,隐藏和业务无关的数据结构(树、数组、链表……)
map<int, string>:: iterator it
reverse_iterator
反向迭代器,用来反向遍历一个容器
const_iterator
常量迭代器,对于一个常量迭代器,只能使迭代器指向别的元素,不能修改指向的元素。而const iterator恰好相反,它必须被初始化指向一个元素,之后不能改变指向,但可以修改指向元素的值。类似于const int * p和int * const p的区别。
const_reverse_iterator
常量反向迭代器
key_compare函数对象
用来比较两个key值,适用于set, multiset, map, multimap。
map<int, char>::key_compare kc = mymap.key_comp();
if( kc(1, -1) )
cout << "ok";
value_compare函数对象
对于set和multiset,和key_compre相同。
对于map和multimap,用来判断迭代器A是否越过了迭代器B。
map<int, char>::value_compare vc = mymap.value_comp();
if( vc( mymap.begin(), mymap.end() ) )
cout << "ok";