Использование
std::distance( m.begin(), it )
В противном случае вызов
std::distance( it , m.begin() )
имеет неопределенное поведение, поскольку используется недопустимый диапазон. Диапазоны в C ++ указываются как [first, last )
, где первый предшествует или равен последнему. В последнем случае, когда first равен последнему, диапазон пуст.
Из стандарта C ++ (27.4.3 Операции итератора)
4 Эффекты: Если InputIterator соответствует требованиямитератор произвольного доступа, возвращает (последний - первый);в противном случае возвращает количество приращений, необходимое для получения от первого до последнего .