2011-09-17 54 views
4

我想用boost::unordered_map<key,value>,其中keystd::set<int>。由于一组整数不是内置类型,所以我认为我必须提供自己的散列函数(或者,我正在考虑使用boost's hash_range)。boost :: unordered_map - 需要指定散列函数std :: set <int>?

不过,现在我想初始化一个哈希表这样,既不提供哈希函数,也不相等谓词 - 和gcc没有抱怨。这里发生了什么? boost是否足够聪明以独立地散列STL容器?这会比我使用自定义哈希函数慢吗?怎么样使用boost::hash_range

在此先感谢。

+0

您是否确实将整个程序链接到可执行文件? –

+0

是的,它运行良好。最初,我曾使用过std :: map(以后我会考虑哈希业务),现在只需用unordered_map替换它。 – Egon

+0

哦,对不起,你在谈论升压版本,而不是标准版本。没关系。如果你喜欢,你仍然可以使用std版本并使用boost提升器:-) –

回答

3

根据the Boost documentation

默认散列函数是Boost.Hash

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

希望这会有所帮助!

3

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

因为它是符合TR1,它将工作与:

integers 
floats 
pointers 
strings 

它还实现在库扩展技术报告问题清单问题6.18由Peter Dimov拥有提出的延长( 63页),这增加了对支持:

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

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

所以是的,boost很聪明,可以散列STL容器。除非你知道你的特定用例set,否则我怀疑提供你自己的散列函数有什么意义。

相关问题