簡體   English   中英

C ++在std :: map <>中使用std :: set <>

[英]C++ Using std::set<> in std::map<>

我想在std :: map中使用std :: set

我沒有很多std ::容器的經驗,所以我不確定我是否使用正確。 我正在嘗試處理一組值,並且每組中都是另一組值。

map<string, set<string> > data_map;

data_map["KEY1"].insert("VAL1");
data_map["KEY1"].insert("VAL2");

data_map["KEY2"].insert("VAL1");
data_map["KEY2"].insert("VAL3");

當我嘗試訪問地圖(內部周期)中的設置時,在這里出現錯誤

error: no match for call to ‘(std::set<std::basic_string<char> >) ()’|
error: no match for call to ‘(std::set<std::basic_string<char> >) ()’|


for( map<string, set<string> >::iterator mip = data_map.begin();mip != data_map.end(); ++mip) {
    for ( set<string>::iterator sit = mip->second().begin(); sit != mip->second().end(); ++sit )
        cout << *sit << endl;

}

您能告訴我如何迭代所有值嗎?

mip->second().begin()

應該

mip->second.begin()

您應該使用mip-> second而不是mip-> second()。 我建議您在for-each循環中使用auto。

for(auto mip : data_map)
{  
    //Do another loop to get the values of your set, to get the set from the map use get<1>(mip);

}

最好以這種方式閱讀,減少錯誤的空間。

不要像函數那樣調用集合。

for( map<string, set<string> >::iterator mip = lines.begin();mip != lines.end(); ++mip) {
    for ( set<string>::iterator sit = mip->second.begin(); sit != mip->second.end();
          ++sit )
        cout << *sit << endl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM