【发布时间】:2014-01-16 21:31:47
【问题描述】:
我正在尝试创建 unordered_set 的 list 的 string。
但我遇到了这个错误:
/usr/include/c++/4.8/bits/hashtable_policy.h:1103:22: error: no match for call to ‘(const std::hash<std::list<std::basic_string<char> > >) (const std::list<std::basic_string<char> >&)’
我怀疑,这是因为 STL 没有 list 或 string 的哈希函数。
创建一个相同类型的set 是可行的,但我担心效率问题(插入和查找时间)。
有什么解决方法吗?我不想为列表实现哈希函数!但可能有人可以建议我一些替代的想法。
【问题讨论】:
-
如你所说,没有定义散列函数。因此,您不想通过定义散列函数来解决问题,也不想使用不需要的容器。好吧,嗯,你只是无缘无故地排除了你的选择:)
-
Boost's 支持标准容器。
-
"我不想为列表实现哈希函数!"为什么不?它不必特别复杂。见boost.org/doc/libs/1_35_0/doc/html/hash/combine.html。如果你不想要 boost 依赖,
hash_combine的实现并不长。 -
在最坏的情况下,我将不得不使用
set。对于list或string,我想不出一个好的散列函数。 -
这个answer 可能会对你有所帮助。