J’ai un vector v1 = {"A","B","C"}
. Je veux vérifier si v1 est included
dans le vector v2 = {"X","Y","A","B","C","D"}
.
STL
? if(counter == v1.size()){break;}
“. Pensez-vous que je devrais lui permettre de poursuivre la recherche au cas où le sous-ensemble serait répété deux fois? #include #include #include using namespace std; float wordOrder ( std::vector v1, std::vector v2 ) { //declare a vector that will be used as an index. If we find the element of v1 in v2 we insert 1 std::vector index ( v2.size(),0 ); int counter = 0; int s = v1.size(); //check if size of v1 less than size of V2 if ( v1.size() <= v2.size() ) { for ( int i = 0; i < v1.size(); i++ ) { for ( int j = 0; j < v2.size(); j++ ) { if ( v1[i]== v2[j]) {index[j] = 1;} } } //loop throught the index vector and check if we have a sequence of 1s for ( int i = 0; i < index.size(); i++ ) { if ( index[i] == 1 ) { for ( int j = i; j < index.size(); j++ ) { if ( index[j] == 1 ) {counter++;} } //if the sequence of 1s = to the size of v1 it means that we have identified the sub-vector if(counter == v1.size()){break;} else{counter = 0; continue;} } } }//end if return counter/(float)v1.size(); } int main() { std::vector v1{"A","B","C"}; std::vector v2{"X","A","B","C","Y"}; cout << wordOrder (v1, v2 ) << endl; return 0; }
Oui, vous pouvez utiliser la bibliothèque standard. Utilisez std::search
pour effectuer une recherche par plage :
vector v1 = {"A","B","C"}; vector v2 = {"X","Y","A","B","C","D"}; auto res = search(begin(v2), end(v2), begin(v1), end(v1));
Et testez si la plage a été trouvée:
auto found = res != end(v2);
Exemple en direct ici .
RE: Puis-je trouver si un ensemble est un sous-ensemble de l’autre en utilisant STL?
La réponse à cette question est oui, mais peut-être pas aussi sexy que vous le souhaitez. Vous pouvez utiliser count_if pour parcourir la v2 et fournir un foncteur qui compte combien de fois un sous-ensemble se produit dans ce conteneur. Si le sous-ensemble que vous recherchez apparaîtra toujours dans l’ordre (c’est-à-dire que C suit B suit A sinon il ne compte pas), vous pouvez utiliser search_n () ou search ().
RE: Si le sous-ensemble est trouvé une seule fois, l’algorithme arrête “if (counter == v1.size ()) {break;}”. Pensez-vous que je devrais lui permettre de poursuivre la recherche au cas où le sous-ensemble serait répété deux fois?
Cela dépend de vos besoins. Avez-vous besoin de cette fonctionnalité? Si oui, alors vous devriez le programmer. Si vous ne le faites pas, les fonctionnalités existantes sont suffisantes, plus simples et plus efficaces, donc meilleures.