C++ 如何插入boost::无序集<;boost::无序集<;int>>;?

C++ 如何插入boost::无序集<;boost::无序集<;int>>;?,c++,boost,C++,Boost,下面的代码无法编译,但是如果我删除了注释行,它将正确编译并运行。我只想使用Boost,因为C++没有为 STD::unOrdEdEdTys提供哈希函数。 #包括 #包括 int main(){ boost::无序的集合fam; boost::无序的集合; s、 插入(5); s、 插入(6); s、 插入(7); std::cout一个无序集(或\u map)使用散列,需要为其元素定义散列运算符。没有为boost::无序集定义散列运算符,因此它无法将此类元素放入您的集中 您可以为此编写自己的哈希

下面的代码无法编译,但是如果我删除了注释行,它将正确编译并运行。我只想使用Boost,因为C++没有为<代码> STD::unOrdEdEdTys<代码>提供哈希函数。
#包括
#包括
int main(){
boost::无序的集合fam;
boost::无序的集合;
s、 插入(5);
s、 插入(6);
s、 插入(7);

std::cout一个
无序集
(或
\u map
)使用散列,需要为其元素定义散列运算符。没有为
boost::无序集
定义散列运算符,因此它无法将此类元素放入您的集中

您可以为此编写自己的哈希函数。例如,这是一种典型的通用哈希方法,但您可能希望针对特定数据对其进行自定义。如果将此代码放入示例中,它应该可以工作:

namespace boost {
  std::size_t hash_value(boost::unordered_set<int> const& arg) {
    std::size_t hashCode = 1;
    for (int e : arg)
      hashCode = 31 * hashCode + hash<int>{}(e);
    return hashCode;
  }
}
namespace boost{
std::size\u t hash\u值(boost::无序集常量和参数){
std::size\u t hashCode=1;
for(int e:arg)
hashCode=31*hashCode+hash{}(e);
返回哈希码;
}
}

我知道这个解决方案已经适用于std::unordered\u set。但我不想提供自定义哈希函数,我认为boost已经为所有容器提供了哈希函数(这就是为什么我首先切换的原因)另外,不是我在OP中问过这个问题,而是你如何解释如果你注释掉插入行,它会编译,因为main()的第一行仍然实例化boost::unordered_集?如果我将该行替换为std::unordered_集,它将不会编译。@redmoncoreyl在类模板的专门化中,成员函数不会实例化,除非它们实际被调用。通过注释插入,您没有达到哈希的要求,因此它会编译(但这并不是非常有用,因为只能有空集。)好的,我现在确实理解了编译的细微差别。那么,参考我在OP中的编辑,boost并没有为它的所有容器定义哈希函数。有没有库可以定义哈希函数呢?我真的不想在OP的编辑中为复杂的数据结构编写自定义哈希函数。就像我在编辑中所说的,我认为这是正确的考虑到python,一个已解决的问题是它不需要定义散列函数就可以自动完成这项工作。