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




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

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

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

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

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

Рассылка новых уроков по программированию:

Сортировка структур. STL Часть 13
Оцени эту статью

Об авторе Olej

Стаж практических программных разработок около 40 лет. Преподаватель международной софтверной компании Global Logic. Постоянный автор публикаций IBM Developer Works. Научный редактор книжного издательства компьютерной литературы "Символ-Плюс", Санкт-Петербург.

Сортировка структур. STL Часть 13: 2 комментария

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

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

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

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

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