Dlaczego nie mogę zrobić std :: map.begin () + 1?

mamstd::map, które chcę powtórzyć, zaczynając od drugiego wpisu.

Mogę to obejść dobrze, ale jestem zdezorientowany, dlaczego składnia „oczywista” nie kompiluje. Komunikat o błędzie nie pomaga, ponieważ odnosi się dostd::string, którego tutaj nie używam.

Oto kod

// suppose I have some map ...
std::map<int, int> pSomeMap;

// this is fine ...
std::map<int, int>::const_iterator pIterOne = pSomeMap.begin();
++pIterOne;

// this doesn't compile ...
std::map<int, int>::const_iterator pIterTwo = pSomeMap.begin() + 1;

VS2012 podaje następujący błąd w powyższej linii

error C2784: 'std::_String_iterator<_Mystr> std::operator +
(_String_iterator<_Mystr>::difference_type,std::_String_iterator<_Mystr>)' :
could not deduce template argument for 'std::_String_iterator<_Mystr>' from 'int'

Czy ktoś może wyjaśnić, co tu się dzieje?

questionAnswers(2)

yourAnswerToTheQuestion