我想使用boost::unordered_map<key,value>
,其中key
是std::set<int>
。由于一组整数不是内置类型,我假设我必须提供自己的哈希函数(或者,我想考虑使用boost's hash_range)。
但是,现在我尝试初始化这样的哈希映射,既不提供哈希函数也不提供等式谓词 - 而gcc没有抱怨。这里发生了什么?是否足够聪明地自行散列STL容器?这会比我使用自定义哈希函数慢吗?如何使用boost::hash_range
?
提前致谢。
答案 0 :(得分:3)
默认哈希函数是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
特定用例的具体内容,否则我怀疑提供自己的哈希函数是否有任何意义。