似乎当我尝试定义 vector 的unordered_set时,出现一条错误消息:“调用隐式删除的unordered_set< vector<int> >
的默认构造函数。”当我定义一个常规(有序)集set< vector<int> >
时,不会发生这种情况。似乎我需要定义hash<vector<int>>
才能摆脱错误。
有谁知道为什么只有在使用unordered_set
时才会出现此错误?两种数据结构都不应使用散列,那么为什么unordered_set需要自定义散列函数?实际上,为了排序set
数据结构,常规的(有序的)vector<int>
是否也不需要一些自定义的比较器吗?
最佳答案
这是因为unordered_set使用std::hash模板计算其条目的哈希,而对没有std::hash。您必须定义自定义哈希以使用unordered_set。
struct vector_hash
{
template <class T1, class T2>
std::size_t operator () (std::pair<T1, T2> const &v) const
{
return std::hash<T1>()(v.size());
}
};
然后将您的unordered_set声明为-std::unordered_set< vector<int>, vector_hash> set;
该哈希函数不好。这只是一个例子。
关于c++ - 调用隐式删除的 'unordered_set< vector<int>>'的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62869571/