Я пытаюсь понять сложность удаления нескольких элементов из std::set. Я использую эту страницу в качестве источника.
В нем утверждается, что сложность удаления одного элемента с помощью итератора амортизируется O (1), но стирание нескольких элементов с использованием формы диапазона составляет log (c.size ()) + std::distance (first, last) (т.е. - log размера набора + количество удаленных элементов).
На первый взгляд, если количество стираемых элементов (n) намного меньше, чем количество элементов в наборе (m), это означает, что перебор стираемых элементов и стирание их по одному выполняется быстрее. (O(n)), чем стирание их одним вызовом (O(log m), предполагая n‹‹m).
Очевидно, что если бы это действительно было так, внутренняя реализация второй формы просто выполняла бы описанный выше цикл.
Это ошибка на сайте? Ошибка в спецификациях? Я просто что-то упустил?
Спасибо, Шахар