Usean kohteen hakualgoritmi (Multiple-Item Search) C++:ssa- selitys, esimerkki ja koodi

Usean kohteen hakualgoritmia käytetään etsimään kaikki tietyn elementin esiintymät luettelosta. Toisin kuin yhden kohteen hakualgoritmit, tämä lähestymistapa pitää kirjaa kohdeelementin useista esiintymisistä ja palauttaa luettelon niiden paikoista.

Kuinka se toimii

  1. Aloita luettelon alusta.
  2. Iteroi jokaisen luettelon elementin läpi.
  3. Vertaa nykyistä elementtiä tavoitearvoon.
  4. Jos nykyinen elementti on yhtä suuri kuin tavoitearvo, tallenna sen sijainti.
  5. Jatka seuraavaan elementtiin ja toista vaiheet 3-4.
  6. Kun olet käynyt läpi koko luettelon, palauta tallennettujen paikkojen luettelo.

Esimerkki

Tarkastellaan kokonaislukujen luetteloa ja haluamme löytää kaikki luvun 23 esiintymät.

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

  1. Aloita alusta: 12. Ei haluttu numero.
  2. Siirry seuraavaan elementtiin: 23. Osuma löydetty, tallennepaikka on 1.
  3. Siirry seuraavaan elementtiin: 45. Ei haluttu numero.
  4. Siirry seuraavaan elementtiin: 23. Osuma löydetty, tallennepaikka on 3.
  5. Siirry seuraavaan elementtiin: 56. Ei haluttu numero.
  6. Siirry seuraavaan elementtiin: 23. Osuma löydetty, tallennepaikka on 5.
  7. Siirry seuraavaan elementtiin: 89. Ei haluttu numero.
  8. Siirry seuraavaan elementtiin: 90. Ei haluttu numero.
  9. Palauta iteroinnin jälkeen luettelo paikoista: [1, 3, 5].

Esimerkkikoodi C++:ssa

#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;  
}  

Annetussa esimerkissä multipleItemSearch funktiota käytetään etsimään kaikki luvun 23 esiintymät kokonaislukuluettelosta. Tuloksena on vektori, joka sisältää kaikkien esiintymien paikat(paikat alkavat 0:sta).