散列容器(hash container)是一种非常重要的容器类型,它通常比二叉树的存储方式可以提供更高的访问效率。因为散列容器是无序的,因此不需要容器提供operator<,而是使用散列函数和键值比较的operator==,比标准容器的要求略微放宽一些。
unordered库提供两个散列集合类unordered_set和unordered_multiset,它们的用法接口和用法与C++标准里的关联容器set/multiset相同,只是内部使用散列表代替二叉树实现,因此查找复杂度由对数将为常数。
下面给出unordered_set的基本大的框架,其实是并没有这么简单的。。。。。
上述的图中只是给出了主的大框架,还有很多的类其实没有给出例如hash_node类,hash_node_constructor类等等并没有在图中体现。
首先给出unordered_set<T,H,P,A>中的参数都是代表什么含义:
T代表了键值类型,
H代表散列函数,该类里面默认使用boost::hash,
P代表键值的比较,默认使用std::equal_to<>
A代表空间配置器,默认使用系统的空间配置器。
从上图可以看出,unordered_set类将类hash_unique_table的对象作为自己的数据成员,实现了类与类之间的通信,然而类hash_unique_table继承与hash_table,hash_table类继承与hash_buckets,hash_buffered_functions类,从大的框架来看各个类的功能都很明确.
针对类unordered_set大概有以下的接口函数:
(1)begin:指定受控序列的开头。(返回为普通迭代器)
(2)end:指定受控序列的结尾。(同样返回为普通迭代器)
(3)cbegin:同样返回受控序列的开头。(返回为常量迭代器)
(4)cend:返回受控序列的结尾。(返回为常量迭代器)
(5)empty:检测元素是否存在。
(6)size:对元素进行计数。
(7)max_size:获取受控序列的最大大小。
(8)emplace:添加就地构造的元素。
emplace直接用参数构造元素并放入容器,返回值为一个对组(