ошибка C2664: мультикарта в карте

Вот мой код:

map<string, multimap<string, string>> mp;
string str1 = "abc";
string str2 = "def";
string str3 = "ghi";
mp.insert(str1, {str2, str3});

Я получил ошибку C2664:

'void std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>::insert(std::initializer_list<std::pair<const _Kty,_Ty>>)' : cannot convert argument 1 from 'std::string' to 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>' c:\users\thomas\documents\visual studio 2013\projects\test\test\main.cpp    14  1   test

Кажется, я должен использовать make_pair поэтому я стараюсь так:

mp.insert(std::make_pair(str1, std::make_pair(str2, str3)));

Но я все еще получаю ту же ошибку.
Что я должен делать?

1

Решение

std::map::insert ожидает string а также multimap<string, string> как его параметр.
Вотmp.insert(str1, {str2, str3});
Вы проходите string и initializer_list<string> в качестве параметров.

Если хотите insert затем,

mp.insert(make_pair(str1, multimap<string, string>{{make_pair(str2, str3)}}));
1

Другие решения

Вы пытаетесь инициализировать мультикарту с помощью std :: pair. Я думаю, что вы имели в виду что-то вроде этого:

multimap<string, string> mm;
mm.insert(std::make_pair(str2, str3));
mp.insert(std::make_pair(str1, mm));

или же

multimap<string, string> mm({{str2, str3}});
mp.insert(std::make_pair(str1, mm));
2