2016-10-01 7 views
0

特定のキーに対して、そのキーに対応するセットの要素を挿入して印刷したいとします。 私が持っているなら A - オレンジ、リンゴ B - 赤、青C++でset(std :: map <string、std :: set < string>>)のマップを反復処理する方法は?

どうすればいいですか?私が開始する方法がわからない `

std::map<string,std::set<string> > mp; 
std::map<string,std::set<string> >::const_iterator row; 
std::set<string>:: const_iterator col; 

mp["A"].insert("pawan"); 
mp["A"].insert("patil"); 

for (row = mp.begin(); row!= mp.end(); row++) 
    for (col = row->begin(); col!=row.end(); col++) 
return 0;` 

: は、これまでのところ、私はこれを書かれています。

std::for_each(mp.cbegin(), mp.cend(), [](auto const& pair){ 
    cout << pair.first << ": "; 
    std::copy(pair.second.cbegin(), pair.second.cend(), std::ostream_iterator<std::string>(std::cout, ", ")); 
    cout << "\n"; 
}); 

live example

答えて

2
for(auto const& pair : mp) { 
    cout << pair.first << ": "; 
    for(auto const& elem : pair.second) { 
     cout << elem << ", "; 
    } 
    cout << "\n"; 
} 

live example

を助けたりしてくださいそのキーのセットのみ。

最初のステップは、集合見つけることです:、今

auto &s=mp["A"]; 

をこのセットに値を挿入します。

s.insert("pawan"); 
s.insert("patil"); 

そして今、セット内の値を印刷し、セットを反復処理:

for (const auto &v:s) 
    std::cout << v << std::endl; 
+0

ペアとelemの宣言方法は?申し訳ありませんが、私はC++を初めて使っています。 –

+0

これらは 'auto const&pair'と' auto const&elem'としてここに宣言されています。これにより、コンパイラは実際の型を推測することができ、long型の名前を自分で指定する必要はありません。ライブサンプルを追加しました。 – krzaq

+0

エラー:ISO C++で型が指定されていない「ペア」の宣言が禁止されています for(自動const&pair:mp) –

0

質問は、印刷要素を挿入しようとし、次に:!あなたがより多くのstdアルゴリズムを使用したい場合は、 `

関連する問題