Como verificar se um elemento está em std::vector? Guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: A eterna pergunta "Isso está aqui?"

Imagine: você está programando um jogo em C++ onde precisa verificar se o jogador tem uma chave no inventário. Ou está trabalhando em um sistema de log — precisa garantir que uma mensagem com esse ID ainda não foi processada. Ou simplesmente está fazendo um dever de casa de programação. E então — pára. Como, diabos, saber rapidamente se um elemento está em std::vector?

Esta pergunta é uma das mais populares no Stack Overflow (dezenas de milhares de visualizações!). E não é à toa. std::vector é o cavalo de batalha do C++, mas não possui um método embutido .contains() como em Python ou C#. Iniciantes frequentemente se perdem. Profissionais — perdem tempo escolhendo a maneira ideal.

Neste artigo, abordaremos todas as principais maneiras de verificar a presença de um elemento em um vetor: desde a mais simples e óbvia até truques inteligentes com busca binária. Você aprenderá qual método usar quando e nunca mais ficará na dúvida. Vamos lá!



Método 1: O clássico — std::find

O caminho mais direto e compreensível é usar o algoritmo std::find do arquivo de cabeçalho <algorithm>. Ele funciona para qualquer tipo de dado que suporte o operador de comparação ==.

A lógica é simples: std::find percorre o vetor do início ao fim e retorna um iterador para o primeiro elemento encontrado. Se o elemento não for encontrado, ele retorna vector.end().



Exemplo de código:

#include <iostream>#include <vector>#include <algorithm> // para std::find

int main() { std::vector<int> numbers = {10, 20, 30, 40, 50}; int target = 30;

// Procurando o elemento auto it = std::find(numbers.begin(), numbers.end(), target);

if (it != numbers.end()) { std::cout << "Elemento " << target << " encontrado! (índice: " << std::distance(numbers.begin(), it) << ")" << std::endl; } else { std::cout << "Elemento " << target << " NÃO encontrado." << std::endl; } return 0;}


Vantagens: Simplicidade, clareza, funciona com qualquer tipo (int, string, structs próprias).

Desvantagens: Complexidade linear O(n). Se o vetor for grande (milhões de elementos) e você pesquisar com frequência — é lento.



Método 2: Contando ocorrências — std::count

Às vezes, você precisa não apenas saber "sim ou não", mas entender quantas vezes um elemento aparece. Para isso, std::count é ideal. Ele também vem de <algorithm>.



Exemplo de código:

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

int main() { std::vector<std::string> fruits = {"apple", "banana", "apple", "orange"}; std::string target = "apple";

int count = std::count(fruits.begin(), fruits.end(), target);

if (count > 0) { std::cout << "Fruta '" << target << "' encontrada " << count << " vez(es)." << std::endl; } else { std::cout << "Fruta ausente." << std::endl; } return 0;}


Vantagens: Fornece o número de repetições. Também muito simples.

Desvantagens: Ainda a complexidade linear O(n). Se você precisa apenas de "sim/não", std::find pode parar na primeira correspondência, enquanto std::count percorre todo o vetor. Portanto, para verificar existência, std::find é um pouco mais rápido.



Método 3: Ordenação + busca binária (para profissionais)

Se você pesquisa elementos no mesmo vetor muitas vezes, é hora de subir de nível. Ordene o vetor uma vez e use std::binary_search. A complexidade é logarítmica O(log n). Isso é muito mais rápido em grandes conjuntos de dados.



Condição importante:

O vetor deve estar ordenado<

Blogs

Book Recommendations