4

我想使用boost::unordered_map<key,value>keya在哪里std::set<int>。由于一组整数不是内置类型,我假设我必须提供我自己的哈希函数(或者,更确切地说,我正在考虑使用boost 的 hash_range)。

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

提前致谢。

4

2 回答 2

3

根据Boost 文档

默认哈希函数是 Boost.Hash

而且,根据Boost.Hash 的文档,为标准容器提供了默认的散列函数。因此,已经有一个为std::set. Boost 哈希容器不够聪明,无法知道如何自动对集合进行哈希处理,但它们足够聪明,可以使用已经提供的实现。

希望这可以帮助!

于 2011-09-17T21:42:52.363 回答
3

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

由于它符合 TR1,因此它适用于:

integers
floats
pointers
strings

它还实现了 Peter Dimov 在 Library Extension Technical Report Issues List(第 63 页)的 issue 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我怀疑提供您自己的哈希函数是否有任何意义。

于 2011-09-17T21:43:18.410 回答