C++ <map> += wywala błąd przy iteratorze

0

Witajcie!
Dlaczego w poniższym kodzie nie działa mi przesuwanie iteratora:

map<string, void*> mMap;
auto it = mMap.begin();
if(hScrollBar->SbGetPos() > 0)
 it += (round(hScrollBar->SbGetPos() / MENULIST_EL_HEIGHT));
 

error: no match for 'operator+=' (operand types are 'std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, void*> >' and '__gnu_cxx::__enable_if<true, double>::__type {aka double}')|

a analogicznie do std::vector już działa bez problemu?

3

Bo vector ma random access iterator, a mapa nie. Możesz użyć std::advance, ale uważaj na wyjście poza end - to UB.

Tak poza tym, koszt skakania po bidirectional iteratorze mapy to O(n), a sam pomysł nie wydaje się zbyt mądry - co chcesz osiągnąć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1