boost :: unordered_map - 需要为散列std :: set <int>?</int>指定自定义散列函数

时间:2011-09-17 21:38:36

标签: c++ boost hashmap unordered-map unordered-set

我想使用boost::unordered_map<key,value>,其中keystd::set<int>。由于一组整数不是内置类型,我假设我必须提供自己的哈希函数(或者,我想考虑使用boost's hash_range)。

但是,现在我尝试初始化这样的哈希映射,既不提供哈希函数也不提供等式谓词 - 而gcc没有抱怨。这里发生了什么?是否足够聪明地自行散列STL容器?这会比我使用自定义哈希函数慢吗?如何使用boost::hash_range

提前致谢。

2 个答案:

答案 0 :(得分:3)

根据the Boost documentation

  

默认哈希函数是Boost.Hash

并且,根据the documentation for Boost.Hash,为标准容器提供了默认的哈希函数。因此,已经为std::set编写了一个哈希函数。 Boost哈希容器不够智能,不知道如何自动散列集,但它们足够聪明,可以使用已经提供的实现。

希望这有帮助!

答案 1 :(得分:3)

正在选择默认的boost::hash< Key >功能。根据其文件

  

由于它符合TR1,因此可以使用:

integers
floats
pointers
strings
     

它还实施了Peter Dimov在图书馆扩展技术报告问题清单(第63页)第6.18期中提出的扩展,这增加了对以下内容的支持:

arrays
std::pair
the standard containers.
extending boost::hash for custom types.

http://www.boost.org/doc/html/hash.html

所以是的,boost非常聪明,可以散列STL容器。除非您了解set特定用例的具体内容,否则我怀疑提供自己的哈希函数是否有任何意义。