std::mismatch() con ejemplos en C++

C++ STL tiene muchas funciones útiles que nos ayudan a realizar diversas tareas de programación. Una de esas funciones es “ mismatch() ”. Esta función, definida en el archivo de encabezado » algoritmo «, ayuda a comparar 2 contenedores en busca de discrepancias . Esta función tiene 2 versiones. Ambos se discuten en este artículo.

  1. desajuste (start_iter1, end_iter1, start_iter2) Esta versión de desajuste solo prueba la desigualdad .
    Aquí, hay 3 argumentos,
    start_iter1: iterador inicial hasta el primer contenedor
    end_iter1: último iterador hasta el 1er contenedor
    start_iter2: iterador inicial hasta el segundo iterador desde donde se desea que comience la comparación.

    Esta función devuelve el primer puntero de par de desajuste , el primer elemento apunta a la posición del primer elemento de desajuste del 1.er contenedor, el segundo elemento apunta a la posición del primer elemento de desajuste del 2.º contenedor. Si no se encuentra ninguna discrepancia, el primer elemento apunta a la posición después del último elemento del primer contenedor y el segundo apunta a la posición correspondiente en el segundo contenedor .

    // C++ code to demonstrate the working of 
    // mismatch( start_iter1, end_iter1, start_iter2 )
      
    #include<iostream>
    #include<algorithm> 
    #include<vector>
    using namespace std;
      
    int main()
    {
          
        // initializing vectors
        vector<int> v1 = { 1, 10, 15, 20 };
        vector<int> v2 = { 1, 10, 25, 30, 45 };
        vector<int> v3 = { 1, 10, 15, 20 };
        vector<int> v4 = { 1, 10, 15, 20, 24 };
          
        // declaring pointer pair
        pair< vector<int>::iterator,
        vector<int>::iterator > mispair;
          
        // using mismatch() to search for 1st mismatch
        mispair = mismatch(v1.begin(), v1.end(), v2.begin());
          
        // printing the mismatch pair
        // 1st mismatch at 15 and 25
        cout << "The 1st mismatch element of 1st container : ";
        cout << *mispair.first << endl;
          
        cout << "The 1st mismatch element of 2nd container : ";
        cout << *mispair.second << endl;
          
        // using mismatch() to search for 1st mismatch
        mispair = mismatch(v3.begin(), v3.end(), v4.begin());
          
        // printing the mismatch pair
        // no mismatch
        // points to position after last 0 and corresponding 24
        cout << "The returned value from 1st container is : ";
        cout << *mispair.first << endl;
          
        cout << "The returned value from 2nd container is : ";
        cout << *mispair.second << endl;
          
    }

    Producción:

    The 1st mismatch element of 1st container : 15
    The 1st mismatch element of 2nd container : 25
    The returned value from 1st container is  : 0
    The returned value from 2nd container is  : 24
    
  2. desajuste (start_iter1, end_iter1, start_iter2, comparador): esta función es casi similar al funcionamiento de la versión mencionada anteriormente, pero ofrece encontrar no solo desajustes de igualdad, sino también otros desajustes deseados y definidos por el usuario a través de la función de comparación definida por el usuario que se envía como cuarto argumento y devuelve un valor booleano verdadero o falso.

    // C++ code to demonstrate the working of
    // mismatch( start_iter1, end_iter1, start_iter2, comparator )
      
    #include<iostream>
    #include<algorithm> 
    #include<vector>
    using namespace std;
      
    // comparator function
    // returns true when element from 
    // 1st element is greater than 2nd
    bool compare(int a, int b)
    {   
        return (a>b);
    }
      
    int main()
    {
          
        // initializing vectors
        vector<int> v1 = { 23, 13, 15, 20 };
        vector<int> v2 = { 1, 10, 25, 30, 45 };
        vector<int> v3 = { 12, 100, 152, 204 };
        vector<int> v4 = { 1, 10, 15, 20, 24 };
          
        // declaring pointer pair
        pair< vector<int>::iterator,
        vector<int>::iterator > mispair;
          
        // using mismatch() to search for 1st mismatch
        mispair = mismatch(v1.begin(), v1.end(), v2.begin(), compare);
          
        // printing the mismatch pair
        // 1st mismatch at 15 and 25
        // 15 is 1st element less than 2nd at same position
        cout << "The 1st mismatch element of 1st container : ";
        cout << *mispair.first << endl;
          
        cout << "The 1st mismatch element of 2nd container : ";
        cout << *mispair.second << endl;
          
        // using mismatch() to search for 1st mismatch
        mispair = mismatch(v3.begin(), v3.end(), v4.begin(), compare);
          
        // printing the mismatch pair
        // no mismatch
        // all elements in 1st container are greater than 2nd
        // points to position after last 0 and corresponding 24
        cout << "The returned value from 1st container is  : ";
        cout << *mispair.first << endl;
          
        cout << "The returned value from 2nd container is  : ";
        cout << *mispair.second << endl;
          
    }

    Producción:

    The 1st mismatch element of 1st container : 15
    The 1st mismatch element of 2nd container : 25
    The returned value from 1st container is  : 0
    The returned value from 2nd container is  : 24
    

Este artículo es una contribución de Manjeet 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 *