我需要将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")) );
但是这样会抛出很多错误。有什么问题吗?
我需要将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")) );
但是这样会抛出很多错误。有什么问题吗?
尝试:
std::map< std::string, std::map<std::string, std::string> > someStorage;
someStorage["Hi"]["This Is Layer Two"] = "Value";
大多
数个 std::string 实现采用写时复制方法,因此字符串实际上并没有被复制)。 - Martin Yorkchar const*
赋值给它的成本是多少?默认的 std::string
可能不需要进行内存分配(如果您的库提供者需要,请更换),然后有 std::string& std::string::operator=(char const*)
,当然,如果字符串已经存在,则可以避免构建一个不会被插入的临时 std::string
... 我认为你最近有点过于尖刻了。 - Matthieu M.std::map
或std::unordered_map
。 - Martin YorksomeStorage["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));
std::map<Key, Value>::value_type
,它特别为此目的typedefed。 - Martin Yorkmake_pair
能够正常工作(就我个人经验而言,在进行insert
时,这也是惯用法)。 - Stuart Golodetz一个地图有一个插入方法,接受一个键值对。你的键是字符串类型,所以没问题,但你的值不是一对(你生成的),而是一个地图类型。所以你需要将一个完整的地图存储为你的值,或者改变初始地图定义来接受一对作为值。
//试一下这个:
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")}) );