2016-10-01 2 views
0

Für einen bestimmten Schlüssel möchte ich Elemente des Satzes, der diesem Schlüssel entspricht, einfügen und drucken. Für z.B. wenn ich habe A - Orange, Apfel B - Rot, BlauWie man in C++ über eine Karte von Set (std :: map <string, std :: set < string>>) iteriert?

Wie drucke ich das? Bisher habe ich dies geschrieben: `

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;` 

Ich weiß nicht, wie ich anfangen soll. Bitte helfen `

Antwort

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

live example

Oder, wenn Sie std Algorithmen mehr verwenden möchten:

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

+0

Wie man Paar und Elem erklären? Entschuldigung, ich bin neu in C++. –

+0

Sie werden hier als 'auto const & pair' und' auto const & elem' deklariert. Dadurch kann der Compiler seine tatsächlichen Typen ableiten, und Sie müssen den langen Typnamen nicht selbst angeben. Live-Beispiel hinzugefügt. – krzaq

+0

Ich bekomme diesen Fehler: Fehler: ISO C++ verbietet die Deklaration von 'Paar' ohne Typ [-fpermissive] für (Auto const & Paar: mp) –

0

Die Frage will ein Element einzufügen, und dann drucken Der Satz für diesen Schlüssel nur.

Der erste Schritt ist es, den Satz zu finden:

auto &s=mp["A"]; 

Nun Einsatz Werte in diese Reihe:

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

Und nun, über den Satz wiederholen, um die Werte in der Menge Druck:

for (const auto &v:s) 
    std::cout << v << std::endl; 
Verwandte Themen