嵌套地图,访问内部地图值

时间:2014-10-14 17:17:12

标签: c++ map stl

例如我有这样的地图:

    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,但它没有帮助我;

2 个答案:

答案 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()){
       (...)
   }
}