C++ STL (std::unordered_set) 中没有用于 std::list 的哈希函数

No hash function in C++ STL (std::unordered_set) for std::list?

本文关键字:std 用于 list 哈希 函数 STL unordered C++ set      更新时间:2023-10-16

我正在尝试创建一个string list unordered_set

但是我遇到了这个错误:

/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 没有用于string list的哈希函数。

创建相同类型的set有效,但我担心效率问题(插入和查找时间)。

有什么解决方法吗?我不想为列表实现哈希函数!但也许有人可以向我提出一些替代想法。

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