写在前面
在c++11新标准中引入了unordered_set以及unordered_map,其背后是根据hash实现,而set、map等背后是根据RB_tree实现,在实现hash时,需要将数据转换为对应的hash码,放入对应的bucket中,所以这里的hash function是至关重要的
简单的hash function
我们可以通过hash_function()函数得到对应的hash function函数
函数原型:
hasher hash_function() const;
unordered_set<string> str_set;
unordered_set<string>::hasher fn = str_set.hash_function();
// auto fn = s.hash_function(); //使用auto自动推断函数类型即可
cout << "fn("<<"value"<<") = " << fn("value") << endl;
可以看到内部默认的hash function将string 类型的"value"转换为一个hash value
但是如果我们在unordered_set中存放自定义的结构体