Основы программирования на С++ для начинающих

Сортировка структур. STL Часть 13

Показанные в предыдущей части разнообразные сортировки — гибкий и красивый механизм на все случаи жизни. Вот только на практике сортировать в чистом виде последовательности почти никогда не приходится. Это всё из области учебно-показательных задач.

На практике куда чаще стоит задача сортировать достаточно объёмные структуры данных (объёмные даже не по своему размеру, а по числу своих полей). И сортировать (или пересортировывать) их предстоит по значениям самых разных полей этих самых структур. Но и здесь на помощь приходят алгоритмы STL, особенно при использовании их совместно с функторами.

Посмотрим типовую модельную задачу, которую мы уже видели раньше — описание учебной группы или факультета:

Программа запрашивает номер поля data, по которому будет вестись сортировка (на самом деле — сравнение). Если этот номер вводится, как положительное число, то сортировка по этому полю идёт в порядке возрастания. Если же номер вводится со знаком минус — то порядок сортировки меняется на обратный:

сортировка структур с++, stl для начинающихсортировка структур с++, stl для начинающих

Обратите внимание, что алгоритму сортировки совершенно безразлично что сортировать: если это числовые данные, то по величине, а если строчные, то в лексографическом порядке.

Сортировка структур. STL Часть 13
5 (100%) 1 vote[s]

3 thoughts on “Сортировка структур. STL Часть 13

  1. А сможете аналогично растолковать функцию find(…)?
    Пытался самостоятельно написать поиск по вектору для структуры типа

    по id-элементу (при том элементов с одинаковым id быть не может).
    Пробовал писал функтор типа

    и посылать его с уже инициализированым id (создавал объект функтора с параметрами и кидал уже его) — нахватал кучку ошибок вроде “функции find(★аргументы★) не существует”.
    Пробовал аналогично с лямбдой — всё тоже самое…
    Подозреваю себя в географически неправильном расположении рук

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *