2016-01-14 38 views
0

我想獲取與條件匹配的所有項目。至於我能做的是代碼迭代器,但我不知道如何繼續下去。這是我的代碼:使用迭代器獲取每個項目與地圖中的條件匹配

map<string, Device*>::iterator it; 
    it = find_if(
     devicesMap.begin(), 
     devicesMap.end(), 
     [](Device* item)->bool{return item->Name() == ""; }); 

此代碼將獲得的第一項條件相匹配,因爲我在代碼的其他部分使用它,但如果有一個以上的人,我怎麼可能去通過所有的他們沒有通過整個地圖?

+1

首先,您需要詳細瞭解['find_if'](http://en.cppreference.com/w/cpp/algorithm/find_if),特別是謂詞函數的參數是什麼,因爲對於['std :: map'](http://en.cppreference.com/w/cpp/container/map)它是*不*你認爲它是。那麼對於你的問題,也許你可以使用['copy_if'](http://en.cppreference.com/w/cpp/algorithm/copy_if)複製到一個新的容器? –

+0

在代碼的其他部分,我的意思是,我沒有在'std :: map'中使用'find_if',而是在'std :: list'中使用'find_if'。回答你的問題,不,我可以創建一個對象的副本,因爲我想修改它們。我想讓所有沒有名字的人寫下來。 – ars1614

+0

那麼你可以把它們(使用'copy_if')放在一個*指針*的容器中去實際的對象。 –

回答

0

最後,我的問題感謝決心@Joachim這樣:

copy_if(originalMap->begin(), 
      originalMap->end(), 
      inserter(auxMap, auxMap.end()), 
      [auxTimevar](std::pair<string, SnmpHwObject*> n)->bool 
     { 
      seconds sec = chrono::duration_cast<seconds>(n.second->TimeStamp()); 
      return (rightNow - sec.count() >= TEN_SECONDS); 
     }); 

我將它張貼,如果有人是很有趣。 我用簡單的for及其if條件檢查了算法,它的工作原理。

相關問題