没有与参数列表匹配"std::make_pair"函数模板实例
No instance of function template "std::make_pair" matches the argument list
像<int, vector<vector<int>>>
这样的对类型使用unordered_map是否合法?Visual Studio 在第 16 行警告我"没有函数模板 "std::make_pair 的实例与参数列表匹配"(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 如何工作的更多信息,请阅读模板函数类型推断和转发引用。
相关文章:
- 是否需要删除包含对象的"pair"?
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- make 命令如何避免重新编译未更改的源文件?
- 对 pair<pair<int,int>pair<int,int unordered_map进行哈希处理>>
- MAKE:找不到包含的用户定义的头文件?
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 'make check' GLIBC 运行时的链接问题
- 删除字符串中具有相同值的任何相邻字母"pair"
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- 当我尝试定义这个向量时<pair<int , pair<int, int> > > vp(n)
- mingw32-make 使用"MinGW Makefiles"生成器跟踪 CMAKE 无法将可执行文件链接到对象库
- 如何从map<pair<string,int>,pair<string,Array>>中迭代和查找?
- make 命令创建 .file,但不创建应用程序文件
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- Qt Creator 在执行步骤 "make" 时出现编译错误,-fno-stack-limit
- 如何使用MySQL Connector and Make设置C++项目
- 使用 make 将对象文件放在特定目录中