Ответ 1
Try:
std::map< std::string, std::map<std::string, std::string> > someStorage;
someStorage["Hi"]["This Is Layer Two"] = "Value";
Мне нужно сохранить std:: map как значение в std:: map
std::map< std::string, std::map<std::string, std::string> > someStorage;
Как вставить во вторую (внутреннюю) карту? Я пробовал:
someStorage.insert( std::make_pair("key", std::make_pair("key2", "value2")) );
Но это вызывает много ошибок. Что не так?
Try:
std::map< std::string, std::map<std::string, std::string> > someStorage;
someStorage["Hi"]["This Is Layer Two"] = "Value";
someStorage["key"].insert(std::make_pair("key2", "value2")));
Если вы все еще хотели использовать вставку на внешней карте, вот один из способов сделать это
std::map<std::string, std::string> inner;
inner.insert(std::make_pair("key2", "value2"));
someStorage.insert(std::make_pair("key", inner));
Карта имеет метод вставки, который принимает пару ключ/значение. Ваш ключ имеет строку типа, поэтому нет проблем, но ваше значение не относится к паре типов (которое вы создаете), а к карте типов. Таким образом, вам нужно либо сохранить полную карту в качестве своего значения, либо изменить начальное определение карты, чтобы принять пару в качестве значения.
//Попробуйте следующее:
std::map< std::string, std::map<std::string, std::string> > myMap;
myMap["key one"]["Key Two"] = "Value";
myMap["Hello"]["my name is"] = "Value";
//Чтобы распечатать карту:
for( map<string,map<string,string> >::const_iterator ptr=myMap.begin();ptr!=myMap.end(); ptr++) {
cout << ptr->first << "\n";
for( map<string,string>::const_iterator eptr=ptr->second.begin();eptr!=ptr->second.end(); eptr++){
cout << eptr->first << " " << eptr->second << endl;
}
}
Также вы можете использовать:
someStorage.insert( std::make_pair("key", std::map<std::string, std::string> {std::make_pair("key2", "value2")}) );