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




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

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

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

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

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

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

дата
сторінка
Сортування структур C ++. СТЛ Частина 13
рейтинг
5
Olej

Про Olej

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

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

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

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

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

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

Код розміщуйте в тегах: <pre class="lang:C ++ декодуванням:true ">ВАШ КОД</заздалегідь>