例如我有这样的地图:
map<string , map <int , int>> example;
和迭代器:
map<string , map <int, int>>::iterator iter;
string word;
我想访问内部地图:
for(iter = example.begin();iter!=example.end;iter++){
iter = Map.find(word);
iter -> second //
}
我应该怎样做以访问内部地图,例如,如果iter-&gt; second == 4 -it's不正确, 或者我可以(iter-&gt; second) - &gt; second ???你可以给我一个建议。我不认为迭代器给了我一对(int,int)所以我试着做另一个迭代器map :: iterator i;并且帮助iter-&gt; second = i,但它没有帮助我;
答案 0 :(得分:4)
对于复杂类型,使用typedef
它会让您的生活更轻松:
typedef std::map< int, int > Ints;
typedef std::map< std::string, Ints > String2Ints;
String2Ints example;
std::string word;
String2Ints::iterator it = example.find( word );
if( it != example.end() ) {
Ints &innerMap = it->second;
Ints::iterator innerit = innerMap.find( 4 );
if( innerit != innerMap.end() )
std::cout << "found value for word " << word << " 4 - " << innerit->second << std::endl;
}
你的循环和查找内部是不正确的,你应该迭代地图或通过find()
搜索值,你在代码中做什么没有任何意义(如果找到单词,技术上是无限循环)< / p>
答案 1 :(得分:3)
iter-&gt;第二个是地图,所以如果你想在其中找到一些东西,你需要另一个找到。 您也可以直接使用迭代器,而不使用for循环。 例如:
map<string , map <int, int>>::iterator iter;
iter = example.find(word);
if (iter != example.end()){
map<int, int>>::iterator innerIter;
int key = 4;
innerIter = iter->second.find(key);
if (innerIter != iter->second.end()){
(...)
}
}