Advertisement
RobertDeMilo

Основы С++4.2 Компаратор для сортировки 3/3

Sep 30th, 2023 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. vector<int> ReadNumbers() {
  8.     int count;
  9.     cin >> count;
  10.    
  11.     vector<int> numbers;
  12.     for (int i = 0; i < count; ++i) {
  13.         int number;
  14.         cin >> number;
  15.         numbers.push_back(number);
  16.     }
  17.  
  18.     return numbers;
  19. }
  20.  
  21. void PrintNumbers(const vector<int>& numbers) {
  22.     for (auto number : numbers) {
  23.         cout << number << " "s;
  24.     }
  25. }
  26.  
  27. int main() {
  28.     vector<int> numbers = ReadNumbers();
  29.    
  30.     sort(numbers.begin(), numbers.end(),
  31.         [] (int n1, int n2) {
  32.             const bool n1_is_even = n1 % 2 == 0;
  33.             const bool n2_is_even = n2 % 2 == 0;
  34.             if (n1_is_even && n2_is_even) {  // n1 и n2 — чётные
  35.                 // Чётные числа сортируются по возрастанию
  36.                 return n1 < n2;
  37.             }
  38.             if (n1_is_even) {  // n1 — чётное, n2 — нечётное
  39.                 return true;   // чётные числа должны предшествовать нечётным
  40.             }
  41.             if (n2_is_even) {  // n1 — нечётное, n2 — чётное
  42.                 return false;  // нечётные числа следуют за чётными
  43.             }
  44.             // n1 и n2 — нечётные
  45.             return n1 > n2; // Нечётные числа сортируются по убыванию
  46.         });
  47.    
  48.     PrintNumbers(numbers);
  49. }
  50. ------------------------------------------------------------------------------------------------------------------
  51. Как и в обычных функциях, в лямбда-функциях разрешается использовать ветвления, циклы и вызовы других функций.
  52.    
  53. В лямбда-функции определите чётность её параметров. Если оба параметра чётные, они должны быть упорядочены по возрастанию. Если оба нечётные, они должны быть упорядочены по убыванию. В остальных случаях параметры лямбда-функции упорядочены, только если первый из них чётный, а второй нечётный.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement