boost::unordered_map——需要为std::set<int>的哈希指定自定义哈希函数吗?

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

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

先行感谢。


你是否将整个程序链接为可执行文件? - Kerrek SB
是的,并且它运行良好。最初,我使用了std::map(认为稍后会处理哈希业务),现在已经简单地将其替换为unordered_map。 - Egon
哦,抱歉,你说的是boost版本,而不是std版本。没关系。如果你喜欢,仍然可以使用std版本并使用boost哈希函数 :-) - Kerrek SB
2个回答

3
默认选择了boost::hash< Key >函数。根据其文档。

As it is compliant with TR1, it will work with:

integers
floats
pointers
strings

It also implements the extension proposed by Peter Dimov in issue 6.18 of the Library Extension Technical Report Issues List (page 63), this adds support for:

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

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

Boost可以聪明地对STL容器进行哈希。除非您对于您特定用例的set有特殊的了解,否则提供自己的哈希函数可能是没有意义的。


3
根据Boost文档,默认哈希函数是Boost.Hash。根据Boost.Hash文档,标准容器提供了默认哈希函数。因此,std::set已经有一个哈希函数。Boost哈希容器不足以自动哈希集合,但它们足够聪明,可以使用已经提供的实现。希望这可以帮到你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接