没有函数模板 "std::make_pair" 的实例与参数列表匹配
No instance of function template "std::make_pair" matches the argument list
将 unordered_map 用于像 <int, vector<vector<int>>>
这样的配对类型是否合法? Visual Studio 警告我 "No instance of function template "std::make_pair 匹配第 16 行中的参数列表 (map.insert(make_pair<int, vector<vector<int>>>(i + m, tt))
):
void test(vector<int>& nums)
{
unordered_map<int, vector<vector<int>>> map;
unordered_map<int, unordered_set<int>> map2;
vector<vector<int>> results;
for (int i = 0; i < nums.size(); i++)
{
for (int m = i + 1; m < nums.size(); m++)
{
if (!map.count(i + m))
{
vector<int> t{ i, m };
vector<vector<int>> tt;
tt.push_back(t);
map.insert(make_pair<int, vector<vector<int>>>(i + m, tt));
map2.insert(make_pair<int, unordered_set<int>>(i + m, unordered_set<int>(i - m)));
}
else if (map2.at(i + m).count(i - m) || map2.at(i + m).count(m - i))
{
continue;
}
else
{
map.at(i + m).push_back(vector<int>{i, m});
map2.at(i + m).insert(i - m);
}
}
}
}
问题似乎是 std::make_pair()
:你应该让这个模板推导出适当的类型:
map.insert(std::make_pair(i + m, tt));
根据 C++ 标准 20.3.3 [pair.spec] 第 9 段 std::make_pair()
声明如下:
template <typename F, typename S>
std::pair<???, ???> make_pair(F&& first, S&& second)
(为 ???
填写了合适的类型)。但是,您指定的类型确实与参数不匹配!如果你想正确指定类型,你会使用
std::make_pair<int, std::vector<std::vector<int>>&>(i + m, tt)
您不应该将类型参数传递给 make_pair
;它应该推断出它们,然后将它们转发给一对值。
只需删除 make_pair
之后的 <int, vector<vector<int>>>
部分。
您可以传递类型并使其工作,但规则很晦涩,过程也无用;通过传递类型,你做错了。
如果要传递类型,将make_pair
换成pair
直接构造即可。 make_pair
的要点是 而不是 必须传递类型。
如果您想了解有关此特定错误的更多信息以及 make pair 的工作原理,请阅读有关模板函数类型推导和转发引用的内容。
将 unordered_map 用于像 <int, vector<vector<int>>>
这样的配对类型是否合法? Visual Studio 警告我 "No instance of function template "std::make_pair 匹配第 16 行中的参数列表 (map.insert(make_pair<int, vector<vector<int>>>(i + m, tt))
):
void test(vector<int>& nums)
{
unordered_map<int, vector<vector<int>>> map;
unordered_map<int, unordered_set<int>> map2;
vector<vector<int>> results;
for (int i = 0; i < nums.size(); i++)
{
for (int m = i + 1; m < nums.size(); m++)
{
if (!map.count(i + m))
{
vector<int> t{ i, m };
vector<vector<int>> tt;
tt.push_back(t);
map.insert(make_pair<int, vector<vector<int>>>(i + m, tt));
map2.insert(make_pair<int, unordered_set<int>>(i + m, unordered_set<int>(i - m)));
}
else if (map2.at(i + m).count(i - m) || map2.at(i + m).count(m - i))
{
continue;
}
else
{
map.at(i + m).push_back(vector<int>{i, m});
map2.at(i + m).insert(i - m);
}
}
}
}
问题似乎是 std::make_pair()
:你应该让这个模板推导出适当的类型:
map.insert(std::make_pair(i + m, tt));
根据 C++ 标准 20.3.3 [pair.spec] 第 9 段 std::make_pair()
声明如下:
template <typename F, typename S>
std::pair<???, ???> make_pair(F&& first, S&& second)
(为 ???
填写了合适的类型)。但是,您指定的类型确实与参数不匹配!如果你想正确指定类型,你会使用
std::make_pair<int, std::vector<std::vector<int>>&>(i + m, tt)
您不应该将类型参数传递给 make_pair
;它应该推断出它们,然后将它们转发给一对值。
只需删除 make_pair
之后的 <int, vector<vector<int>>>
部分。
您可以传递类型并使其工作,但规则很晦涩,过程也无用;通过传递类型,你做错了。
如果要传递类型,将make_pair
换成pair
直接构造即可。 make_pair
的要点是 而不是 必须传递类型。
如果您想了解有关此特定错误的更多信息以及 make pair 的工作原理,请阅读有关模板函数类型推导和转发引用的内容。