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

新手上路,请多包涵

似乎当我尝试定义一个 unordered_set 向量时,我收到一条错误消息:“调用 unordered_set< vector<int> > 的隐式删除的默认构造函数。”当我定义一个常规(有序)集时,这不会发生: set< vector<int> > 。似乎我需要定义 hash<vector<int>> 以消除错误。

有谁知道为什么我只有在使用 unordered_set 时才会收到此错误?两种数据结构都不应该使用散列,那么为什么 unordered_set 需要自定义的散列函数呢?实际上,不应该常规(有序) set 还需要一些自定义比较器才能订购 vector<int> 数据结构吗?

原文由 vincenzo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

这是因为 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;

这个散列函数不好。这只是一个例子。

原文由 Satakshi Pandey 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏