C++ 从嵌套映射中提取值

C++ 从嵌套映射中提取值,c++,map,iterator,nested,C++,Map,Iterator,Nested,我四处张望,找不到我需要的东西。我正在寻找一种方法,在输出语句中从外部映射中提取关键点,并从内部映射中提取usin的值。如果我有一张地图,我知道我可以使用insideMap[key]从内部地图中提取所需的数据。但是,[]操作符似乎在此实现中不起作用(*itr).second)[关键字] map< string, map<string, int> >::const_iterator itr; for( itr=books.begin(); itr!=books.end()

我四处张望,找不到我需要的东西。我正在寻找一种方法,在输出语句中从外部映射中提取关键点,并从内部映射中提取usin的值。如果我有一张地图,我知道我可以使用
insideMap[key]
从内部地图中提取所需的数据。但是,
[]操作符
似乎在此实现中不起作用
(*itr).second)[关键字]

map< string, map<string, int> >::const_iterator itr; 
for( itr=books.begin(); itr!=books.end(); ++itr)
  //code I need here
map::常量迭代器itr;
for(itr=books.begin();itr!=books.end();++itr)
//我需要这里的代码

[]
有关的问题是迭代器的
常量:
[]
运算符不是
常量,因此您需要使用
查找(关键字)
,并取消对其返回的迭代器的引用:

*(((*itr).second).find(keyword))
您还可以切换到非常量迭代器并使用
[]

您可以使用std::map::at()而不是运算符[]。at()返回类键运算符[]的值,但at()有一个常量版本


at()和运算符[]之间的区别在于,at()执行额外的范围检查,如果失败,则抛出范围外异常。

运算符[]
通过插入新值(如果该值不存在)来修改映射。因此,您不能将其与
常量迭代器一起使用。谢谢。我想我不想使用非
常量
迭代器,因为我不想弄乱我的映射。然后我意识到我并没有把我的地图用于其他任何事情,默认的构造对我的帮助大于伤害。
(itr->second).at(keyword)