Algoritmo de pesquisa de vários itens (Multiple-Item Search) em C++- explicação, exemplo e código

O algoritmo de busca de itens múltiplos é usado para localizar todas as ocorrências de um elemento específico em uma lista. Ao contrário dos algoritmos de pesquisa de item único, essa abordagem rastreia várias ocorrências do elemento de destino e retorna uma lista de suas posições.

Como funciona

  1. Comece do início da lista.
  2. Percorra cada elemento da lista.
  3. Compare o elemento atual com o valor alvo.
  4. Se o elemento atual for igual ao valor alvo, registre sua posição.
  5. Continue para o próximo elemento e repita as etapas 3-4.
  6. Depois de iterar por toda a lista, retorne a lista de posições registradas.

Exemplo

Vamos considerar uma lista de números inteiros e queremos encontrar todas as ocorrências do número 23.

Lista: {12, 23, 45, 23, 56, 23, 89, 90}

  1. Comece do começo: 12. Não é o número desejado.
  2. Mover para o próximo elemento: 23. Correspondência encontrada, registre a posição como 1.
  3. Mova para o próximo elemento: 45. Não é o número desejado.
  4. Mover para o próximo elemento: 23. Correspondência encontrada, registre a posição como 3.
  5. Mova para o próximo elemento: 56. Não é o número desejado.
  6. Mover para o próximo elemento: 23. Correspondência encontrada, registre a posição como 5.
  7. Mova para o próximo elemento: 89. Não é o número desejado.
  8. Mover para o próximo elemento: 90. Não é o número desejado.
  9. Após a iteração, retorne uma lista de posições: [1, 3, 5].

Exemplo de código em C++

#include <iostream>  
#include <vector>  
  
std::vector<int> multipleItemSearch(const std::vector<int>& arr, int target) {  
    std::vector<int> positions;  
  
    for(int i = 0; i < arr.size(); ++i) {  
        if(arr[i] == target) {  
            positions.push_back(i);  
        }  
    }  
  
    return positions;  
}  
  
int main() {  
    std::vector<int> numbers = {12, 23, 45, 23, 56, 23, 89, 90};  
    int target = 23;  
  
    std::vector<int> result = multipleItemSearch(numbers, target);  
  
    std::cout << "Occurrences of " << target << " found at positions: ";  
    for(int pos: result) {  
        std::cout << pos << ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}  

No exemplo dado, a multipleItemSearch função é usada para localizar todas as ocorrências do número 23 em uma lista de inteiros. O resultado será um vetor contendo as posições de todas as ocorrências(as posições começam em 0).