11.4无序容器
C++11新增了4中容器,他们是无序关联容器,因为他们组织元素不靠比较运算符,而是使用一个哈希函数和==运算符,这些容器组织的元素没有明显的顺序,所以他们是无序关联容器。
有序的关联容器,在某个时候维护序需要较大的代价,如果我们并不会利用元素的序,那么可以使用无序关联容器。
因为无序关联容器也有multi版本,因此大部分情况下,有序关联容器和有序关联容器都是可以互换着使用的。
无序容器在组织上为一组桶,每个桶内都有零个或者多个元素。使用哈希函数将关键字映射到桶。
关键字通过哈希函数来计算哈希值,哈希值对应着某一个桶,如果关键字得到的是相同的哈希值,那么元素将会被放到同一个桶中,所以multi类型的无序容器,同一关键字的多个元素放在同一个桶中。
如果一个桶中有多个关键字,那么在查找元素时,找到这个桶之后,对桶中的元素进行顺序搜索,得到对应的关键字的元素。
把关键字映射为哈希值找到对应的桶是很快的操作,但是如果桶中有很多个元素,那么在顺序搜索的时候会耗费一定的时间。因此无序关联容器的性能取决于哈希函数的质量和桶的数量。
因为无序关联容器靠桶来组织,所以无序关联容器提供了一组桶的管理操作。
无序容器对关键字类型的要求
之前的有序容器中