std::buscar en C++ – Part 1

std::search se define en el archivo de encabezado <algorithm> y se usa para averiguar la presencia de una subsecuencia que satisface una condición (igualdad si no se define dicho predicado) con respecto a otra secuencia.

  • Busca en la secuencia [first1, last1) la primera ocurrencia de la subsecuencia definida por [first2, last2), y devuelve un iterador a su primer elemento de la ocurrencia, o last1 si no se encuentran ocurrencias.
  • Compara los elementos en ambos rangos secuencialmente usando operator== (versión 1) o en base a cualquier predicado dado (versión 2). Una subsecuencia de [first1, last1) se considera una coincidencia solo cuando esto es cierto para todos los elementos de [first2, last2). Finalmente, std::search devuelve la primera de tales ocurrencias.

Se puede utilizar en cualquiera de las dos versiones, como se muestra a continuación:

  1. Para comparar elementos usando == :

    Búsqueda de ForwardIterator1 (ForwardIterator1 first1, ForwardIterator1 last1,
    ForwardIterator2 first2, ForwardIterator2 last2);

    first1: reenvía
    el iterador al principio del primer contenedor en el que se buscará.
    last1: reenvía
    el iterador hasta el final del primer contenedor en el que se buscará.
    first2: reenvía
    el iterador al principio de la subsecuencia del segundo contenedor que se va a buscar.
    last2: reenvía
    el iterador al final de la subsecuencia del segundo contenedor que se va a buscar.

    Devuelve: un iterador al primer elemento de la
    primera ocurrencia de [first2, last2) en [first1, last1), o last1
    si no se encuentran ocurrencias.

    CPP

    // C++ program to demonstrate the use of std::search
      
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main()
    {
        int i, j;
      
        // Declaring the sequence to be searched into
        vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7 };
      
        // Declaring the subsequence to be searched for
        vector<int> v2 = { 3, 4, 5 };
      
        // Declaring an iterator for storing the returning pointer
        vector<int>::iterator i1;
      
        // Using std::search and storing the result in
        // iterator i1
        i1 = std::search(v1.begin(), v1.end(), v2.begin(), v2.end());
      
        // checking if iterator i1 contains end pointer of v1 or not
        if (i1 != v1.end()) {
            cout << "vector2 is present at index " << (i1 - v1.begin());
        } else {
            cout << "vector2 is not present in vector1";
        }
      
        return 0;
    }

    Producción:

    vector2 is present at index 2
    
  2. Para la comparación basada en un predicado (o condición):

    Búsqueda de ForwardIterator1 (ForwardIterator1 first1, ForwardIterator1 last1,
    ForwardIterator2 first2, ForwardIterator2 last2,
    BinaryPredicate pred);

    Todos los argumentos son iguales a la plantilla anterior, solo se agrega un argumento más

    pred: Función binaria que acepta dos elementos como argumentos (uno de cada uno de los dos contenedores, en el mismo orden), y devuelve un valor convertible a bool. El valor devuelto indica si se considera que los elementos coinciden en el contexto de esta función. La función no modificará ninguno de sus argumentos. Puede ser un puntero de función o un objeto de función.

    Devuelve: un iterador, al primer elemento de la primera ocurrencia de [first2, last2) que satisface un predicado, en [first1, last1), o last1 si no se encuentran ocurrencias.

    CPP

    // C++ program to demonstrate the use of std::search
    // with binary predicate
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
      
    // Defining the BinaryPredicate function
    bool pred(int i, int j)
    {
        if (i > j) {
            return 1;
        } else {
            return 0;
        }
    }
      
    int main()
    {
        int i, j;
      
        // Declaring the sequence to be searched into
        vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7 };
      
        // Declaring the subsequence to be compared to based
        // on predicate
        vector<int> v2 = { 3, 4, 5 };
      
        // Declaring an iterator for storing the returning pointer
        vector<int>::iterator i1;
      
        // Using std::search and storing the result in
        // iterator i1 based on predicate pred
        i1 = std::search(v1.begin(), v1.end(), v2.begin(), v2.end(), pred);
      
        // checking if iterator i1 contains end pointer of v1 or not
        if (i1 != v1.end()) {
            cout << "vector1 elements are greater than vector2 starting "
                 << "from position " << (i1 - v1.begin());
        } else {
            cout << "vector1 elements are not greater than vector2 "
                 << "elements consecutively.";
        }
      
        return 0;
    }

    Producción:

    vector1 elements are greater than vector2 starting from position 3
    

Artículos relacionados:

Este artículo es una contribución de Mrigendra Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *