Можно ли использовать unordered_map для типа пары, например <int, vector<vector<int>>>
? Visual Studio предупреждает меня «Нет экземпляр шаблона функции„станд :: make_pair не совпадает со списком аргументов“в строке 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);
}
}
}
}
действительно так, поскольку C++ 11. http://en.cppreference.com/w/cpp/utility/pair/make_pair –
Почему именно 'std :: vector >>' требуется, чтобы быть ссылкой для правильного соответствия типов? –
SebNag
@SebTu: параметры шаблона задаются с помощью ссылки пересылки (тип которой предназначен для вывода). Когда тип указан явно, он объединяется с '&&'. Это при использовании 'X' для типа у вас будет параметр типа' X && ', к которому могут привязываться только rvalues. Использование 'X &' дает 'X & &&', который становится 'X & 'после обращения коллапса, к которому могут привязываться не-константы lvalues. Параметр 'tt' является неконвертом lvalue типа' std :: vector> '. Вы также можете добавить 'const' перед' & ', но в этом случае это не обязательно. ... и лучше всего оставить свои типы! –