2016-05-03 3 views
1

У меня есть карта называется assets вернулась из константной функции, я использую const_iterator, чтобы получить подмножество карты, как это:нет матча для «оператора + =» аки станда :: _ Rb_tree_const_iterator станд :: Карта

std::map<int, Asset>::const_iterator start = assets.begin(); 
start += 5; 
...... 

Но я получил ошибку: error: no match for ‘operator+=’ (operand types are ‘std::map<int, Asset>::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const int, Asset> >}’ and ‘int’)

+0

Дубликат о 'std :: list', но проблема точно такая же:' std :: map' имеет двунаправленные операторы, которые не поддерживают эту арифметическую операцию типа. Вам нужно увеличивать их на один шаг за раз. – juanchopanza

ответ

6

Это потому, что std::map итераторы BidirectionalIterators, а не RandomAccessIterators - и, следовательно, поддерживать operator++ и operator--, но не operator+= и operator-=.

Вместо этого используйте std::advance(start, 5) (имея в виду, что это приведет к повторному вызову operator++).