std::unordered_set<string> things {16}; // 16 buckets std::unordered_set<string> words {"one", "two", "three", "four"};// Initializer list std::unordered_set<string> some_words {++std::begin(words), std::end (words)}; // Range std::unordered_set<string> copy_wrds {words}; // Copy constructor模板参数是默认的参数类型,指出了哈希函数的类型。当需要保存对象时,必须为它提供哈希函数,也需要为构造函数指出模板类型参数和函数参数。为了保存前面章节中介绍的 Name 类型,需要按如下方式定义 unordered_set<Name> 容器:
std::unordered_set<Name, Hash_Name> names {8, Hash_Name()};//8 buckets & hash function上面第二个模板类型参数是用来哈希 Name 对象的函数对象类型。构造函数的第二个参数是这个函数对象的一个实例,当指定哈希函数时,需要同时指定格子的个数,因为它是构造函数的第一个参数。如果省略构造函数的第二个参数,容器会默认使用第二个模板类型参数的实例。如果 Hash_Name 是函数对象类型,就不再需要指定构造函数的第二个参数。
names.max_load_factor(8.0); // Max average no. of elements per bucket通过增加最大载入因子,可以减少格子的使用个数,但会对元素访问的时间产生不利影响,因为增加访问元素会涉及格子的搜索可能性。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有