> 这样的对类型使用 unordered_map 是否合法? Visual Studio 在第 16 行 (map.insert(make_pair>>(i + m, tt))) 中警告我“没-6ren">
gpt4 book ai didi

c++ - 没有函数模板 "std::make_pair"的实例与参数列表匹配

转载 作者:搜寻专家 更新时间:2023-10-30 23:53:22 29 4
gpt4 key购买 nike

对像 <int, vector<vector<int>>> 这样的对类型使用 unordered_map 是否合法? Visual Studio 在第 16 行 (map.insert(make_pair<int, vector<vector<int>>>(i + m, tt))) 中警告我“没有函数模板实例”std::make_pair 匹配参数列表”:

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)

关于c++ - 没有函数模板 "std::make_pair"的实例与参数列表匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325199/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com