C ++: Скотт Мейерс «Эффективный STL»: элемент 31: узнайте свои параметры сортировки: помогите понять

Добрый день!

В своем «Эффективном STL» Скотт Мейерс написал

Третий вариант - использовать информацию в упорядоченном контейнере итераторов для итеративного объединения элементов списка в те позиции, в которых они должны находиться. Как вы можете видеть , вариантов много. (Правило 31, вторая часть)

Может кто-нибудь объяснить мне это?


Еще текст (для понимания контекста):

Алгоритмы sort, stable_sort, partial_sort и nth_element требуют итераторов произвольного доступа, поэтому они могут применяться только к векторам, строкам, двухсторонним таблицам и массивам. Нет смысла сортировать элементы в стандартных ассоциативных контейнерах, потому что такие контейнеры используют свои функции сравнения, чтобы всегда оставаться отсортированными. Единственный контейнер, в котором мы могли бы использовать sort, stable_sort, partial_sort или nth_element, но не можем, - это list, и list в некоторой степени компенсирует это, предлагая свою функцию-член sort. (Интересно, что list :: sort выполняет стабильную сортировку.) Если вы хотите отсортировать список, вы можете, но если вы хотите использовать partial_sort или nth_element для объектов в списке, вы должны делать это косвенно. Один из косвенных подходов - скопировать элементы в контейнер с итераторами произвольного доступа, а затем применить к нему желаемый алгоритм. Другой - создать контейнер list :: iterators, использовать алгоритм в этом контейнере, а затем получить доступ к элементам списка через итераторы. Третий вариант - использовать информацию в упорядоченном контейнере итераторов для итеративного объединения элементов списка в те позиции, в которых они должны находиться. Как видите, существует множество вариантов.

9
задан becko 24 July 2015 в 16:10
поделиться