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

boost::unordered_map -- Need to specify a custom hash function for hashing std::set<int>?

本文关键字:散列函数 自定义 lt int gt std map unordered boost set      更新时间:2023-10-16

我想使用boost::unordered_map<key,value>,其中keystd::set<int>。因为一组整数不是内置类型,所以我假设我必须提供自己的哈希函数(或者,更确切地说,我正在考虑使用boost的hash_range)。

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

根据Boost文档:

默认哈希函数为Boost。哈希

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

希望这对你有帮助!

正在选择默认的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的特定用例有所了解,否则我怀疑提供自己的哈希函数没有任何意义。