c++ - 调用隐式删除的 'unordered_set< vector<int>>'的默认构造函数

标签 c++ hash set unordered-set

似乎当我尝试定义 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/

相关文章:

javascript - Backbone 中集合/有序集的数据结构是什么?

c++ - 向 C++ 控制台应用程序添加状态栏

c++ - 最先进的 C++ 项目

java - 在java中使用散列来匹配模式

c# - HashPasswordForStoringInConfigFile()的输出是什么格式,如何存储最好?

ruby - 将数组的数组转换为数组集

c++ - 如果 A 有析构函数,什么时候 std::unique_ptr<A> 需要一个特殊的删除器?

C++ 在 vector 中动态访问 vector

git - 为什么 Git 在 blob 文件中存储(和散列)blob 大小?

python - 理解 set() 函数