11.5 关联容器类

关联容器 (associative container):它们能通过 关键字 (search key)直接访问(存储和读取元素)。包括四类: 集合 (set), 多重集合 (multiset), 映射 (map)和 多重映射 (multimap)。

集合和多重集合类

◆  1、集合和多重集合类 :提供了控制数值集合的操作,其中数值是关键字,即不必另有一组值与每个关键字相关联。

集合与多重集合类的主要差别在于多重集合允许重复的关键字,而集合不允许重复的关键字。

元素的顺序由比较器 函数对象 (comparator function object)确定。例如对整型集合multiset,只要用比较器 函数对象 less<int>排序关键字,元素即可按升序排列。

◆  2、集合(set)类模板声明为:
    template<typename Key, typename Pred = less<Key>,
                  typename A = allocator<Key> >class set;
    //模板参数表中的非类型参数同样可有默认值

◆  3、集合(set)类容器的构造函数:
    set (); //构造一个空的按默认次序排列的集合
    set (pr); //构造一个空的按函数对象pr排序的集合
    set (first,last);
    //构造一个默认次序排列的集合,元素值由区间[first,last)指定的序列复制
    set (first,last,pr); //同上,但按函数对象pr排序

这些构造函数还可以显式给出分配子(Allocator)对象。

◆  4、集合和多重集合类支持双向迭代子。

◆  5、多重集合(multiset)和集合(set)通常实现为红黑二叉排序树。 红黑二叉排序树是实现平衡二叉排序树的方法之一。

【例11.7】整型多重集合关联容器类。( 查看源码

映射和多重映射类

◆  1、映射和多重映射类 :它们提供了操作与关键字相关联的映射值(mapped value)的方法。

映射和多重映射的主要差别在于多重映射允许存放与映射值相关联的重复关键字,而映射只允许存放与映射值一一对应的单一关键字。

多重映射和映射关联容器类用于快速存储和读取关键字与相关值(关键字/数值对,key/value pair)。
如果保存学生的简明资料,要求按学号排序,使用映射关联容器(因为不会重号)是最合适的。如用姓名排序,因姓名可能重复,使用多重映射更为合适。使用时要用头文件<map>。

◆  2、映射(map)类模板声明
    template<typename Key,typename T,typename Pred = less<Key>,
                  typename A = allocator<pair<const Key,T>> > class map;

◆  3、 map容器有多种构造函数
    map (); //构造一个空的按默认次序排列的映射
    map (pr); //构造一个空的按函数对象pr排序的映射
    map (first,last);
    //构造按默认次序排列的映射,元素值由区间[first,last)指定的有序序列复制
    map (first,last,pr); //同上,但按函数对象pr排序
这些构造函数还可以显式给出分配子(allocator)对象。

◆  4、映射(map)类的使用 :映射和多重映射类支持双向迭代子。
映射定义了成员操作符[]:
    T& operator[const Key& key]
这样映射的使用是非常方便的,就如同一个数组,关键字作为下标,相关值作为元素值。

【例11.8】我国部分省份与面积映射关联容器类的演示。 ( 查看源码

你可能感兴趣的:(11.5 关联容器类)