error: call to implicitly-deleted default constructor of 'unordered_map<vector<int>, int>'解释一下这个错误
时间: 2024-02-01 09:16:38 浏览: 217
这个错误是因为使用了一个未定义的默认构造函数,导致编译器无法生成默认构造函数。在C++11标准中,当一个类定义了拷贝构造函数或析构函数时,编译器会自动删除其默认构造函数,因为这些函数需要一个明确的对象来进行初始化或销毁。
在这个错误中,可能是因为使用了`unordered_map`模板类,但没有为`vector<int>`类型定义默认的哈希函数和相等函数。为了解决这个问题,你需要手动定义一个哈希函数和相等函数,并将它们作为模板参数传递给`unordered_map`。
例如:
```c++
#include <unordered_map>
#include <vector>
struct VectorHasher {
size_t operator()(const std::vector<int>& v) const {
size_t seed = v.size();
for (auto& i : v) {
seed ^= i + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
return seed;
}
};
struct VectorEqual {
bool operator()(const std::vector<int>& lhs, const std::vector<int>& rhs) const {
return lhs == rhs;
}
};
std::unordered_map<std::vector<int>, int, VectorHasher, VectorEqual> my_map;
```
在上面的代码中,我们定义了一个`VectorHasher`类和一个`VectorEqual`类,分别实现了哈希函数和相等函数。然后我们通过将它们作为模板参数传递给`unordered_map`来创建了一个`my_map`对象。
阅读全文