對於像<int, vector<vector<int>>>
這樣的pair類型使用unordered_map是否合法?沒有函數模板「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);
}
}
}
}
確實如此,因爲C++ 11。 http://en.cppreference.com/w/cpp/utility/pair/make_pair –
爲什麼'std :: vector >>必須是一個正確匹配類型的引用? –
SebNag
@SebTu:模板參數通過轉發參考(其類型意味着被推斷)指定。當明確指定類型時,它與'&&'結合在一起。這樣,當使用'X'作爲類型時,你將有一個類型爲'X &&'的參數,只有rvalues可以綁定。使用'X&'給出'X&&',它在引用崩潰後變爲'X&',非''const'左值可以綁定到'X&'。參數'tt'是'std :: vector>'類型的非'constst'左值。你也可以在'&前面加一個'const',但在這種情況下不需要。 ......並且最好將這些類型關閉! –