我必须将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")) );
但这会引发很多错误。怎么了?
答案 0 :(得分:40)
尝试:
std::map< std::string, std::map<std::string, std::string> > someStorage;
someStorage["Hi"]["This Is Layer Two"] = "Value";
答案 1 :(得分:21)
someStorage["key"].insert(std::make_pair("key2", "value2")));
如果你仍想在外部地图上使用insert,这是一种方法
std::map<std::string, std::string> inner;
inner.insert(std::make_pair("key2", "value2"));
someStorage.insert(std::make_pair("key", inner));
答案 2 :(得分:4)
map有一个insert方法,它接受一个键/值对。你的密钥是字符串类型,所以这没问题,但你的值是不是类型对(你生成的),但是类型为map。因此,您需要存储一个完整的地图作为您的值或您更改初始地图定义以接受一对作为值。
答案 3 :(得分:3)
//试试这个:
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;
}
}
答案 4 :(得分:0)
您还可以使用列表初始化:
someStorage.insert( std::make_pair("key", std::map<std::string, std::string> {std::make_pair("key2", "value2")}) );