2016-10-01 86 views
0

對於我想插入和打印對應於該鍵的集合的元素的特定鍵。 對於例如如果我有 A - 橙色,蘋果 B - 紅色,藍色如何在C++中迭代集合(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;` 

我不知道如何開始。請大家幫忙`

回答

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

live example

或者,如果你想使用std算法的更多!

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

如何聲明pair和elem?對不起,我是C++新手。 –

+0

它們在這裏被聲明爲'auto const&pair'和'auto const&elem'。這允許編譯器推斷出它們的實際類型,並且不必自己指定長類型名稱。增加了現場示例。 – krzaq

+0

我得到這個錯誤: 錯誤:ISO C++禁止沒有類型的'pair'聲明[-fpermissive] for(auto const&pair:mp) –

0

問題要插入一個元素,然後打印該集合僅用於該密鑰

的第一步是找到一組:

現在
auto &s=mp["A"]; 

,將值插入這一套:

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

而現在,遍歷集合,打印的設置值:

for (const auto &v:s) 
    std::cout << v << std::endl; 
相關問題