2017-07-25 6 views
1

タイトルは、この2Dマップの "group1"のすべての要素を印刷したいとしています。私はこれを試しましたが、私はちょうどforループで大きなエラーを取得します。第1のインデックスを与えられた2Dマップのすべての要素を印刷する方法

#include<iostream> 
#include<string> 
#include<map> 
using namespace std; 

int main(){ 
    map<string,map<int,double> > myMap; 
    myMap["group1"][13] = 10.41; 
    myMap["group1"][15] = 31.2; 

    //print all elements in "group1" 
    for (map< string, map<int,double> >::const_iterator iter = 
     myMap["group1"].begin(); iter != myMap["group1"].end(); ++iter) 
     { 
     cout << iter->first << '\t' << iter->second << '\n'; 
     } 

    return 0; 
} 

ご協力いただきありがとうございます!

+0

とエラーメッセージはありますか? – pm100

+0

およびC++のバージョン – pm100

+0

自動x = myMap ["group1"]; (自動y:x)cout << y.first << y.second –

答えて

1

myMap["group1"]の種類がmap<int,double>ないmap<string,map<int,double>>

です次に、あなたのコードはでしょう何とかこのように見える:

const map<int,double> &grp1map = myMap["group1"]; 
for (map<int,double>::const_iterator iter = grp1map.begin(); iter != grp1map.end(); ++iter) 
{ 
    cout << iter->first << '\t' << iter->second << '\n'; 
} 

これを012と簡単にすることができます:

auto &grp1map = myMap["group1"]; 
for (auto iter = grp1map.begin(); iter != grp1map.end(); ++iter) 
{ 
    cout << iter->first << '\t' << iter->second << '\n'; 
} 

しかし、いずれにせよ、あなたはこのようにそれを行う必要があります。

for (auto &elem : myMap["group1"]) 
{ 
    cout << elem.first << '\t' << elem.second << '\n'; 
} 
+0

ではありません。友人たちは、この複雑なイテレータの構文を助けます。 –

+0

oh ya derp、ありがとう! –

1

あなたが外map<string,map<int,double> >を取得し、イテレータしようとしているのに対し、あなたは、あなたの内部map<int,double>にイテレータをしたい:

int main() { 
    map<string, map<int, double> > myMap; 
    myMap["group1"][13] = 10.41; 
    myMap["group1"][15] = 31.2; 

    //print all elements in "group1" 
    for (map<int, double>::const_iterator iter = 
     myMap["group1"].begin(); iter != myMap["group1"].end(); ++iter) 
    { 
     cout << iter->first << '\t' << iter->second << '\n'; 
    } 

    return 0; 
} 
関連する問題