HOWTO · C++

Pesquisa Binária C++ STL

Este tutorial demonstra como usar o algoritmo de pesquisa binária da biblioteca de modelos padrão C++.

Nesta página

C++ nos fornece uma função pronta para uso binary_search() para que não tenhamos que implementar a função nós mesmos. É um método muito simples de usar e implementado de forma eficiente e não está sujeito a erros.

C++ STL binary_search() Visão geral

Sintaxe

DEFAULT
    : template <class ForwardIterator, class T>
      bool
      binary_search(ForwardIterator first, ForwardIterator last, const T& val);

CUSTOM COMPARISON FUNCTION
    : template <class ForwardIterator, class T, class Compare>
      bool
      binary_search(ForwardIterator first, ForwardIterator last, const T& val,
                    Compare comp);

Aqui, T pode ser qualquer um dos seguintes: int, float, short, long, byte, char, double e até mesmo um Object definido pelo utilizador como Nós vamos.

Ele verifica se um elemento dentro de [first, end) corresponde ao elemento de destino X usando o algoritmo de pesquisa binária. Por padrão, ele usa o operador menor que para comparar elementos, mas também podemos fornecer nosso próprio comp personalizado, conforme descrito no segundo modelo fornecido acima.

Parâmetros

first Um iterador direto apontando para o primeiro elemento no intervalo de array fornecido.
last Um iterador direto apontando para o último elemento no intervalo de array fornecido.
comp Uma função de predicado binário definida pelo usuário que aceita dois iteradores de encaminhamento como argumentos e retorna true se os dois argumentos estiverem presentes na ordem correta. Ele não modifica nenhum argumento e segue a ordem estrita e fraca para ordenar os elementos.
val O elemento de destino que estamos pesquisando dentro do intervalo de array fornecido.

Retornar

Se ele encontrar o elemento de destino, ele retornará verdadeiro; caso contrário, ele retorna falso.

Programa C++ para Pesquisa Binária

#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 << "Element found" << endl;
  } else {
    cout << "Element not found" << endl;
  }

  return 0;
}