我正在尝试创建一个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
有效,但我担心效率问题(插入和查找时间)。
这有什么解决方法吗?我不想为列表实现哈希函数!但可能有人可以向我推荐一些其他想法。
答案 0 :(得分:0)
class MyClass {
private:
struct Hash : public std::unary_function< std::list<std::string> const& ls,
size_t> {
std::size_t operator()(std::list<std::string> const& ls) const;
};
typedef boost::unordered_set< std::list<std::string>, Hash > MyClassSet;
MyClassSet set_;
};
std::size_t MyClass::Hash::operator()(std::list<std::string> const& ls) const {
std::size_t seed = 0;
std::list<std::string>::iterator it = ls.begin();
while ( it != ls.end()) {
boost::hash_combine(seed, *it);
++it;
}
return seed;
}