STL 关联容器简单介绍
关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素。在 STL 中,有四种关联容器,各自是:
- map 键值对 key-value 存储,key 不可反复,即一个 key 仅仅能相应一个 value, 相应头文件<map>
- multimap 键值对 key-value 存储,key 能够反复,即一个 key 能够相应多个 value, 相应头文件<map>
- set 仅仅有 key, key 不可反复,相应头文件<set>
- multiset 仅仅有 key, key 能够反复。相应头文件<set>
STL 关联容器特点
- STL 关联容器的底层数据结构是红黑树。故其增删查的时间复杂度都是 O(logn)
- map 默认依照 key 的升序进行插入,非基本数据类型要求重载 < 运算符
- map 重载了 [] 运算符,使的插入和查找很方便
- map 用 [] 运算符訪问元素时,假设不存在这个key。key会自己主动插入,value为初始化值
- map 的 key 对象使用之后就不要再改动,假设必须改动,须要删除后又一次插入
- multimap 的 key-value 是一对多,没有重载 [] 运算符
map 经常使用函数
#构造:map c: #创建空映射,不包括不论什么元素map c(op): #以 op 为排序准则,产生一个空的mapmap c1(c2): #复制 c2 中的元素到 c1 中map c(const value_type *first, const value_type* last): #复制 [first, last) 之间元素构成新映射map c(const value_type *first, const value_type* last,op): #以 op 为排序准则。复制[first, last)之间元素构成新映射multimap m: #创建空映射,不包括不论什么元素 multimap m(op): #以 op 为排序准则,产生一个空的 multimapmultimap m1(m2): #复制 m2 中的元素到 m1 中multimap m(const value_type *first, const value_type* last): #复制 [first, last)之间元素构成新映射multimap m(const value_type *first, const value_type* last,op): #以op为排序准则,复制 [first, last)之间元素构成新映射#增删iterator insert(const value_type& x): #插入元素 xiterator insert(iterator it,const value_type& x): #在迭代指针 it 处插入元素xvoid insert(const value_type *first,const value_type* last): #插入[first, last)之间元素iterator erase(iterator it): #删除迭代指针it处元素iterator erase(iterator first,iterator last): #删除[first, last)之间元素size_type erase(const Key& key): #删除键值等于key的元素#遍历iterator begin(): #返回首元素的迭代器指针iterator end(): #返回尾元素的迭代器指针reverse_iterator rbegin(): #返回尾元素的逆向迭代器指针reverse_iterator rend(): #返回首元素前一个位置的迭代器指针reference operator[](const Key& k): #仅仅用在映射map 类中。重载[],并返回值的引用#功能int size() const: #返回容器元素个数bool empty() const: #推断容器是否空。若返回true。表明容器已空const_iterator find(const Key& key) const: #查找返回键值等于 key 的迭代器指针int count(const Key& key) const: #返回键值等于 key 的元素的个数const_iterator lower_bound(const Key& key): #返回键大于等于 key 的第一个迭代器指针const_iterator upper_bound(const Key& key): #返回键大于 key 的第一个迭代器指针pairequal_range(const Key& key) const: #返回一对迭代器,使得[first, last)内元素等于key
set 经常使用函数
#构造set c: #创建空集合,不包括不论什么元素set c(op): #以 op 为排序准则。产生一个空的 setset c1(c2): #复制 c2 中的元素到 c1 中set c(const value_type *first, const value_type* last): #复制 [first, last) 之间元素构成新集合set c(const value_type *first, const value_type* last,op): #以 op 为排序准则。复制 [first, last) 之间元素构成新集合multiset m: #创建空集合,不包括不论什么元素multiset m(op): #以 op 为排序准则,产生一个空的 setmultiset m1(m2): #复制 m2 中的元素到 m1 中multiset m(const value_type *first, const value_type* last): #复制 [first, last) 之间元素构成新集合multiset m(const value_type *first, const value_type* last,op): #以 op 为排序准则,复制 [first, last) 之间元素构成新集合#增删pairinsert( x): #插入元素xiterator insert(iterator it,x): #在迭代器it处插入元素xvoid insert(const value_type *first,const value_type *last): #插入[first, last)之间元素iterator erase(iterator it): #删除迭代器指针it处元素iterator erase(iterator first,iterator last): #删除[first, last)之间元素size_type erase(const Key& key): #删除元素值等于key的元素#遍历iterator begin(): #返回首元素的迭代器指针iterator end(): #返回尾元素的迭代器指针reverse_iterator rbegin(): #返回尾元素的逆向迭代器指针reverse_iterator rend(): #返回首元素前一个位置的迭代器指针#功能int size() const: #返回容器元素个数bool empty() const: #推断容器是否为空,若返回true,表明容器已空const_iterator find(const Key& key) const: #查找返回元素值等于key的迭代器指针int count(const Key& key) const: #返回容器中元素等于key的元素的个数const_iterator lower_bound(const Key& key): #返回键大于等于 key 的第一个迭代器指针const_iterator upper_bound(const Key& key): #返回键大于 key 的第一个迭代器指针pair equal_range(const Key& key) const: #返回一对迭代器,使得[first, last)内元素等于keyvoid swap(set& s): #交换集合元素void swap(multiset& s): #交换多集合元素
map 小样例
#include#include
【地址:http://blog.csdn.net/thisinnocence/article/details/39646813】