对于std :: list,C ++ STL(std :: unordered_set)中没有哈希函数?

时间:2014-01-16 13:06:44

标签: c++ c++11 hash stl

我正在尝试创建一个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有效,但我担心效率问题(插入和查找时间)。

这有什么解决方法吗?我不想为列表实现哈希函数!但可能有人可以向我推荐一些其他想法。

1 个答案:

答案 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;
}