2013-07-31 49 views
3

assumend我有一個(填充)的列表發現在只有第一個元素被稱爲

std::list<std::pair<int,otherobject>> myList; 

,並希望找到()這個名單,其中int具有特定值中的第一個元素的STL列表一對- 我怎樣才能做到這一點?

解釋它遠一點:

我想這些對到列表中添加帶有標識otherobject,但不是唯一的一個int。這些int /其他對到達的順序必須保持。

在訪問此列表中的元素期間發現int時,必須返回(併除去)該int的第一個出現次數。

謝謝!

回答

9

我想我會使用標準的find_if算法:

auto pos = std::find_if(myList.begin(), myList.end(), 
         [value](std::pair<int, otherobject> const &b) { 
          return b.first == value; 
         }); 

這給出了一個迭代器與所需值的元素 - 從那裏,你可以複製值,刪除值,等等。 ,就像其他迭代器一樣。

+0

即使我會使用'std :: find_if'。 +1。 – Nawaz

+0

「pred的簽名必須是bool pred(const T&arg)」 基於http://msdn.microsoft.com/en-us/library/wkwky1wa.aspx –

+0

我在VS2013和上面的代碼(我用代替)給我以下神祕錯誤: 錯誤C2784:'unknown-type std :: operator - (std :: move_iterator <_RanIt>&,const std :: move_iterator <_RanIt2>&)':無法推導出模板參數'std :: move_iterator <_RanIt>&'from'std :: _ List_iterator >>>'\t C:\ Program Files(x86 )\ Microsoft Visual Studio 12.0 \ VC \ include \ algorithm plotutil –

1

根據您的需要,更好的選擇是使用multimap。 在你情況下,將給予:

std::multimap<int, otherobject> myMultiMap; 

然後尋找鏈接到INT(敏)otherobjects時,你會做:

std::pair<std::multimap<int, otherobject>::iterator, std::multimap<int, otherobject>::iterator> result = myMultiMap.equal_range(myInt); 

    for (std::multimap<int,otherobject>::iterator iter=result.first; iter!=result.second; ++iter) 
    { 
     std::cout << it->second; 
    } 

這是一個STL容器,所以你會發現easilly在線文檔。

+0

在multimap中,posi沒有定義新添加的數據集,我不能強迫它追加它。只有在插入過程中提供_hint_的可能性 - 但multimap不需要使用此提示。 – Elmi

相關問題