C++ C+中没有哈希函数+;std::list的STL(std::无序集)?

C++ C+中没有哈希函数+;std::list的STL(std::无序集)?,c++,c++11,hash,stl,C++,C++11,Hash,Stl,我正在尝试创建一个无序集的列表的字符串 但我被这个错误所困扰: /usr/include/c++/4.8/bits/hashtable_policy.h:1103:22:错误:调用“(const std::hash)(const std::list&)”不匹配 我怀疑,这是因为STL没有用于string的list的哈希函数 创建一个相同类型的集合是可行的,但我担心效率问题(插入和查找时间) 有什么解决办法吗?我不想为列表实现哈希函数!但是也许有人能给我一些其他的建议。classmyclass

我正在尝试创建一个
无序集
列表
字符串

但我被这个错误所困扰:


/usr/include/c++/4.8/bits/hashtable_policy.h:1103:22:错误:调用“(const std::hash)(const std::list&)”不匹配

我怀疑,这是因为STL没有用于
string
list
的哈希函数

创建一个相同类型的
集合
是可行的,但我担心效率问题(插入和查找时间)


有什么解决办法吗?我不想为列表实现哈希函数!但是也许有人能给我一些其他的建议。

classmyclass{
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;
}
私人: 结构散列:公共std::一元函数{ std::size\u t操作符()(std::list const&ls)const; }; typedef boost::无序_集MyClassSet; MyClassSet; }; std::size\u t MyClass::Hash::operator()(std::list const&ls)const{ std::size\u t seed=0; std::list::iterator it=ls.begin(); while(it!=ls.end()){ boost::hash_combine(seed,*it); ++它; } 返回种子; }
正如您所说,没有定义哈希函数。因此,您不希望通过定义散列函数来解决问题,也不希望使用不需要散列函数的容器。嗯,你只是无缘无故地排除了这两个选项:)'s支持标准容器。“我不想为列表实现哈希函数!”为什么不呢?不必特别复杂。看见如果你不想要一个boost依赖,
hash\u combine
的实现时间不长。在最坏的情况下,我将不得不使用一个
set
。对于
字符串的
列表
,我想不出一个好的哈希函数。这可能会对您有所帮助。