boost::unordered_map -- 需要为散列 std::set 指定自定义散列函数<int>吗?
boost::unordered_map -- Need to specify a custom hash function for hashing std::set<int>?
我想使用boost::unordered_map<key,value>
,其中key
是std::set<int>
。因为一组整数不是内置类型,所以我假设我必须提供自己的哈希函数(或者,更确切地说,我正在考虑使用boost的hash_range)。
然而,现在我尝试像这样初始化一个哈希映射,既不提供哈希函数,也不提供相等谓词——gcc没有抱怨。这里发生了什么?boost是否足够聪明,可以自行散列STL容器?这会比使用自定义哈希函数慢吗?使用boost::hash_range
呢?
根据Boost文档:
默认哈希函数为Boost。哈希
并且,根据Boost的文档。为标准容器提供了默认的哈希函数。因此,已经为std::set
编写了一个哈希函数。Boost散列容器还不够聪明,无法知道如何自动散列集合,但它们足够聪明,可以使用已经提供的实现。
希望这对你有帮助!
正在选择默认的boost::hash< Key >
函数。根据其文档
http://www.boost.org/doc/html/hash.html由于它与TR1兼容,因此它将使用:
integers floats pointers strings
它还实现了Peter Dimov在库扩展技术报告问题列表(第63页)的第6.18版中提出的扩展,这增加了对:
的支持arrays std::pair the standard containers. extending boost::hash for custom types.
所以是的,boost足够聪明来散列STL容器。除非您对set
的特定用例有所了解,否则我怀疑提供自己的哈希函数没有任何意义。
相关文章:
- 为非标准对象定义散列函数和相等函数
- 对于自定义类的一个未定义集,是否有一个默认的散列函数
- 成员函数自定义类型在C++中返回"不命名类型"错误
- 字典中使用了什么散列函数(hash_table)
- 指针的最快散列函数是什么
- 一个很好的向量散列函数
- 获得快速的k对独立散列函数的选项是什么
- 避免散列函数中的严格混叠冲突
- 当我在Unorder容器中使用位集时,散列函数是什么样子的
- 这个简单的散列函数背后的逻辑是什么
- 很好的散列函数可以从数组中删除重复项
- uint32_t值对的交换散列函数
- 带有自定义散列函数(bstrt)的无序映射仅适用于默认构造函数(重复键)
- 如何在散列函数中选取基数
- 使用unordered_set时,struct中嵌套结构的散列函数
- c++使用[](int i){return i;}作为unordered_set散列函数
- boost::unordered_map -- 需要为散列 std::set 指定自定义散列函数<int>吗?
- 为嵌套自定义类型定义散列函数
- 所有stl容器的通用散列函数
- 使用lambda定义散列函数会引发异常