Добрый день!
В своем "Эффективном STL" Скотт Мейерс написал
Третье - использовать информацию в упорядоченном контейнере итераторов, чтобы итеративно разделить элементы списка на позиции, в которых вы бы хотели, чтобы они находились. Как вы можете видеть, существует множество вариантов. (Пункт 31, вторая часть)
Может кто-нибудь объяснить мне это?
Больше текста (чтобы понять контекст):
Алгоритмы sort, stable_sort, частичный_сорт и nth_element требуют итераторов произвольного доступа, поэтому их можно применять только к векторам, строкам, запросам и массивам. Не имеет смысла сортировать элементы в стандартных ассоциативных контейнерах, потому что такие контейнеры используют свои функции сравнения, чтобы всегда оставаться отсортированными. Единственный контейнер, в котором мы могли бы использовать sort, stable_sort ,partal_Sort или nth_element, но не можем, это list, и list несколько компенсирует, предлагая свою функцию члена sort. (Интересно, что list :: sort выполняет стабильную сортировку.) Если вы хотите отсортировать список, то вы можете, но если вы хотите использовать part_sort или nth_element для объектов в списке, вы должны сделать это косвенно. Одним из косвенных подходов является копирование элементов в контейнер с итераторами произвольного доступа, а затем применение к нему желаемого алгоритма. Другой - создать контейнер list :: iterators, использовать алгоритм для этого контейнера, а затем получить доступ к элементам списка через итераторы. Третье - использовать информацию в упорядоченном контейнере итераторов, чтобы итеративно разделить элементы списка на позиции, в которых вы хотите, чтобы они находились. Как видите, существует множество вариантов.