Показанные в предыдущей части разнообразные сортировки — гибкий и красивый механизм на все случаи жизни. Вот только на практике сортировать в чистом виде последовательности почти никогда не приходится. Это всё из области учебно-показательных задач.
На практике куда чаще стоит задача сортировать достаточно объёмные структуры данных (объёмные даже не по своему размеру, а по числу своих полей). И сортировать (или пересортировывать) их предстоит по значениям самых разных полей этих самых структур. Но и здесь на помощь приходят алгоритмы STL, особенно при использовании их совместно с функторами.
Посмотрим типовую модельную задачу, которую мы уже видели раньше — описание учебной группы или факультета:
Программа запрашивает номер поля data, по которому будет вестись сортировка (на самом деле — сравнение). Если этот номер вводится, как положительное число, то сортировка по этому полю идёт в порядке возрастания. Если же номер вводится со знаком минус — то порядок сортировки меняется на обратный:
Обратите внимание, что алгоритму сортировки совершенно безразлично что сортировать: если это числовые данные, то по величине, а если строчные, то в лексографическом порядке.
А сможете аналогично растолковать функцию find(…)?
Пытался самостоятельно написать поиск по вектору для структуры типа
по id-элементу (при том элементов с одинаковым id быть не может).
Пробовал писал функтор типа
и посылать его с уже инициализированым id (создавал объект функтора с параметрами и кидал уже его) — нахватал кучку ошибок вроде “функции find(★аргументы★) не существует”.
Пробовал аналогично с лямбдой — всё тоже самое…
Подозреваю себя в географически неправильном расположении рук
Могу разобраться и растолковать ;-).
Только это довольно обстоятельно, и здесь редактор комментариев не позволяет.
Обращайтесь сюда: http://rus-linux.net/forum/viewforum.php?f=31