Статьи по c++

Как сделать бинарный поиск на C++ STL

C++ предоставляет нам готовую к использованию функцию binary_search(), поэтому нам не нужно реализовывать ее самостоятельно. Он очень прост в использовании, эффективно реализован и не допускает ошибок.

Обзор C++ STL binary_search()

Синтаксис

DEFAULT: template <class ForwardIterator, class T> bool binary_search (ForwardIterator first, ForwardIterator last, const T& val); ПОЛЬЗОВАТЕЛЬСКАЯТЕЛЬСКАЯСКАЯАЯЯ: template <class ForwardIterator, class T, class Compare> bool binary_search (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
Code language: JavaScript (javascript)

Здесь T может быть любым из следующих: int, float, short, long, byte, char, double и даже пользовательским объектом.
Проверяет, совпадает ли элемент в пределах [first, last) с целевым элементом X, используя алгоритм двоичного поиска. По умолчанию он использует оператор less-than для сравнения элементов, но мы также можем предоставить собственный пользовательский comp, как описано во втором шаблоне, приведенном выше.

Параметры

  • first – Прямой итератор, указывающий на первый элемент в заданном диапазоне массива.
  • last – Прямой итератор, указывающий на последний элемент в заданном диапазоне массива.
  • comp – Определяемая пользователем бинарная предикатная функция, которая принимает в качестве аргументов два прямых итератора и возвращает true, если оба аргумента находятся в правильном порядке. Он не изменяет никаких аргументов и следует строгому слабому порядку для сортировки элементов.
  • val – Целевой элемент, который мы ищем в заданном диапазоне массива.

Возврат

Если он находит целевой элемент, то возвращает true, в противном случае – false.

Программа на C++ для двоичного поиска

#include <bits/stdc++.h> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5, 6}; if (binary_search(v.begin(), v.end(), 5)) { cout << "Элемент найден" << endl; } else { cout << "Элемент не найден" << endl; } return 0; }
Code language: PHP (php)

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

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