2016-11-20 9 views
1

ある項目に続く地図のすべての項目をループしたい。std :: mapの指定されたイテレータ位置の後にループを続ける

残念ながら、 'operator +'(オペランドの種類は 'std :: _ Rb_tree_iterator'と 'int')には一致しません。

私は間違っていますか?

#include <iostream> 
#include <map> 

int main() 
{ 
    std::map<char,int> m = { 
    {'a',1},{'b',2},{'c',3},{'d',4}, 
    }; 

    // Position at 'b' (the 'given item') 
    auto it = m.find('b'); 

    // Output everything after 'b': 
    for (auto it1=it+1; it1!=m.end(); ++it1) { 
    std::cout << it1->first << " => " << it1->second << '\n'; 
    } 

    return 0; 
} 
+3

'のための(!自動IT1 =それ+ 1; IT1 = m.end(); ++ IT1){ 'すでに' end()を指している場合、未定義の振る舞いのために条件が失敗する可能性があります。 –

答えて

3

std::mapのためのイテレータがランダムアクセスではありませんので、operator+()を持っていません。あなたは代わりにstd::next()を使用する必要があります。

for (auto it1=std::next(it); it1!=m.end(); ++it1) { 
    std::cout << it1->first << " => " << it1->second << '\n'; 
} 
+0

もし私が正しく見れば、あなたは26秒早くRaw N ... - >あなたは "解決"を得る。ありがとうございました。 – rplantiko

1

++作品ばかりだけでなく:

// Output everything after 'b': 
    for (auto it1=++it; it1!=m.end(); ++it1) { 
     std::cout << it1->first << " => " << it1->second << '\n'; 
    } 
関連する問題