Работает ли std::advance на итераторе std::multiset за постоянное время?
Я хотел бы знать, если вызов std::advance на итераторе std::multiset выполняется в постоянное время.
2 ответа
Решение
От std::advance
, Мы видим, что
сложность
Linear. Однако, если InputIt дополнительно соответствует требованиям RandomAccessIterator, сложность постоянна.
Как любой шаблон из std::*map
а также std::*set
семья не выполняет RandomAccessIterator
требования, это линейно. Например, отсюда:
Типы участников
[...]
iterator
Константа Двунаправленного Итератораconst_iterator
Константа Двунаправленного Итератора
Нет, только итераторы с произвольным доступом могут продвигаться в постоянном времени. В противном случае это линейное время на расстоянии.
Смотрите: https://en.cppreference.com/w/cpp/iterator/advance