Сортування структур. СТЛ Частина 13




сортування структур з ++, stl для початківцівПоказання в попередній частині різноманітні сортування - Гнучкий і красивий механізм на всі випадки життя. Ось тільки на практиці сортувати в чистому вигляді послідовності майже ніколи не доводиться. Це все з області навчально-показових завдань. На практиці куди частіше стоїть завдання сортувати досить об'ємні структури даних (об'ємні навіть не за своїм розміром, а по числу своїх полів). І сортувати (або перевпорядковувати) їх має бути за значеннями самих різних полів цих самих структур. Але і тут на допомогу приходять STL алгоритми, особливо при використанні їх разом з функторами.

Подивимося типову модельну задачу, яку ми вже бачили раніше - опис навчальної групи або факультету:

Програма запитує номер поля дані, за яким вестиметься сортування (насправді - порівняння). Якщо цей номер вводиться, як позитивне число, то сортування по цьому полю йде в порядку зростання. Якщо ж номер вводиться зі знаком мінус - то порядок сортування змінюється на зворотний:

сортування структур з ++, stl для початківцівсортування структур з ++, stl для початківців

Зверніть увагу, що алгоритму сортування абсолютно байдуже що сортувати: якщо це числові дані, то за величиною, а якщо малі, то в лексографіческом порядку.

Нові уроки з програмування:

Сортування структур. СТЛ Частина 13
Оціни цю статтю

Про Olej

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

2 думки про "Сортування структур. СТЛ Частина 13

  1. А зможете аналогічно розтлумачити функцію find(…)?
    Намагався самостійно написати пошук по вектору для структури типу

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

    і посилати його з вже ініціалізірованим id (створював об'єкт функтора з параметрами і кидав вже його) - Нахапав купку помилок на кшталт “функції find(★ аргументи ★) не існує”.
    Пробував аналогічно з лямбда - все те ж саме…
    Підозрюю себе в географічно неправильному розташуванні рук

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *