2015-09-04 3 views
1

Вот мой код:
ошибка C2664: MultiMap на карте

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)}})); 
+0

Ваш ответ очень помогает. Благодарю. – Yves

+0

'mp.insert ({str1, multimap {{str2, str3}}});' Это работает. Можете ли вы рассказать мне, почему это 'multimap {{str2, str3}}' вместо 'multimap {str2, str3}'? – Yves

+1

ах, я понял. Теперь я понимаю о '{}' в C++ 11. : D – Yves

2

Вы пытаетесь инициализировать multimap с помощью 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)); 
+0

Dang это, ты меня опередил. :) @Thomas Вот также хороший пример того, как работать с картами: http://www.cplusplus.com/reference/map/map/insert/ Из того, что я вижу, вы действительно испытываете трудности с пониманием того, как работает вставка. – rbaleksandar

+0

Фактически, я знал, что это сработает: 'multimap mm ({{str2, str3}}); mp.insert ({str1, mm}); 'Так что я думал, что' mp.insert ({str1, {str2, str3}}) 'должен работать. Я думаю, что я правильно не использую '{}' в C++ 11. – Yves

Смежные вопросы