Назад к вопросам
Junior
181
questionbank

Что такое предикат?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Предикат — это функция или объект функции (например, лямбда-выражение), который возвращает булево значение (true или false).

В контексте стандартной библиотеки C++ предикаты часто используются для определения условий в алгоритмах, таких как сортировка, фильтрация или поиск.

Предикаты делятся на:

  • Унарные предикаты: принимают один аргумент.
  • Бинарные предикаты: принимают два аргумента.

Примеры использования:

#include <vector>
#include <algorithm>
#include <iostream>

// Унарный предикат: проверка на четность
bool is_even(int n) {
    return n % 2 == 0;
}

// Бинарный предикат: сравнение на больше
bool is_greater(int a, int b) {
    return a > b;
}

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5, 6};

    // Использование унарного предиката с std::count_if
    int even_count = std::count_if(numbers.begin(), numbers.end(), is_even);
    std::cout << "Четных чисел: " << even_count << std::endl;

    // Использование бинарного предиката с std::sort
    std::sort(numbers.begin(), numbers.end(), is_greater); // Сортировка по убыванию

    std::cout << "Отсортированные по убыванию: ";
    for (int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    // Использование лямбда-предиката (унарный)
    auto is_odd = [](int n){ return n % 2 != 0; };
    int odd_count = std::count_if(numbers.begin(), numbers.end(), is_odd);
    std::cout << "Нечетных чисел: " << odd_count << std::endl;

    return 0;
}