Clase de comparación en C++ con ejemplos

Las clases de comparación se utilizan para comparar los objetos de las clases definidas por el usuario. Para desarrollar una función genérica, use una plantilla , y para hacer que la función sea más genérica, use contenedores , de modo que se puedan hacer comparaciones entre los datos.

Sintaxis:

class comparator_class {
public:
    // Comparator function
    bool operator(object o1, object o2)
    {
  
        // There can be any condition
        // implemented as per the need
        // of the problem statement
        return (o1.data_member
                == o2.data_member);
    }
}

Explicación: la clase operator() de la función de comparación anterior toma dos pares de objetos a la vez y devuelve verdadero si los miembros de datos de los dos operadores son los mismos. Puede haber cualquier condición según la necesidad del problema en la función de comparación. En el ejemplo anterior, la función devuelve verdadero si los miembros de datos son los mismos.

Ejemplo 1:
para implementar la búsqueda lineal en los elementos de la array , la búsqueda de un número entero en una array dada se puede implementar fácilmente. Pero la búsqueda de cualquier elemento en el tipo de datos definido por el usuario no se puede implementar fácilmente como en el caso de una array. En este caso, la clase de comparación se utiliza para implementarlo. A continuación se muestra el programa para el mismo:

C++

// C++ program for the Comparator Class
// for implementing linear search
#include <bits/stdc++.h>
using namespace std;
  
// Generic function to search for object
template <class ForwardIterator, class T>
ForwardIterator search(
    ForwardIterator start,
    ForwardIterator end, T key)
{
    // Iterate until start equals to end
    while (start != end) {
  
        // If the value with given key is
        // found the return that index
        if (*start == key) {
            return start;
        }
        start++;
    }
    return end;
}
  
// Student Class
class student {
public:
    // To store Name and Roll Number
    string name;
    int rollnum;
  
    // Overloaded Constructor
    student(string name, int rollnum)
    {
        this->name = name;
        this->rollnum = rollnum;
    }
};
  
// Comparator Class to compare 2 objects
class studentcompare {
public:
    // Comparator function
    bool operator()(student a,
                    student b)
    {
        // If values are the same then
        // return true
        if (a.name == b.name) {
            return true;
        }
        return false;
    }
};
  
// Driver Code
int main()
{
    // Object of class student
    student s1("Raj", 23);
    student s2("Prerna", 24);
  
    // List of students
    list<student> s;
    s.push_back(s1);
    s.push_back(s2);
  
    // Search student("Prerna", 24)
    student searchstudent("Prerna", 24);
  
    studentcompare cmp;
  
    // Print if element is found
    if (cmp(s2, searchstudent)) {
        cout << "Student found!";
    }
    else {
        cout << "Not found";
    }
  
    return 0;
}
Producción:

Student found!

Explicación:

  • En el programa anterior, se crea una lista de objetos de estudiante en la que inicialmente se insertan 2 objetos de estudiante.
  • Ahora, para buscar a un estudiante en particular, se escribe una función de búsqueda lineal de plantilla que hace uso de la clase de comparación.
  • La clase de comparación compara al estudiante que se buscará de la lista de estudiantes en función de su atributo de nombre.
  • Si el atributo de nombre del objeto que se va a buscar es igual a cualquiera de los atributos de nombre del objeto en la lista, devuelve verdadero; de lo contrario, devuelve falso.

Ejemplo 2:

Tomemos otro ejemplo del uso de la clase Comparator para ordenar , supongamos que la tarea es ordenar una array de objetos en función del valor de sus atributos, luego la idea es crear una clase de comparación personalizada en la que se debe realizar la función en la que se debe realizar la clasificación. puede ser mencionado. Luego, se puede pasar como un argumento en la función sort() .

C++

// C++ program for the Comparator Class
// implementing sorting
  
#include <bits/stdc++.h>
using namespace std;
  
// Student Class
class student {
public:
    // To store Name and Roll Number
    string name;
    int rollnum;
  
    // Overloaded Constructor
    student(string name, int rollnum)
    {
        this->name = name;
        this->rollnum = rollnum;
    }
};
  
// Comparator Class to compare 2 objects
class studentcompare {
public:
    // Comparator function
    bool operator()(const student& a,
                    const student& b)
    {
        // Compare on basis of roll number
        if (a.rollnum < b.rollnum) {
            return true;
        }
        return false;
    }
};
  
// Driver Code
int main()
{
    // Object of class student
    student s1("Raj", 23);
    student s2("Prerna", 24);
    student s3("Harshit", 21);
  
    // List of students
    list<student> s;
    s.push_back(s1);
    s.push_back(s2);
    s.push_back(s3);
  
    // Creating object of
    // comparator class
    studentcompare cmp;
  
    // Passing the object of
    // comparator class to sort()
    s.sort(cmp);
  
    // Printing the list after sorting
    for (auto stu : s) {
        cout << stu.name << " ";
    }
  
    return 0;
}
Producción:

Harshit Raj Prerna

Explicación:

  • En el programa anterior, se crea una lista de objetos de estudiante en la que inicialmente se insertan 3 objetos de estudiante.
  • Ahora, si la lista del estudiante debe ordenarse en función del atributo rollno del estudiante, entonces debe pasarse una clase de comparación personalizada como argumento a la función sort() .
  • En la clase de comparación, se debe mencionar una lógica de predicados que devuelva verdadero o falso en función de la cual se ordena la lista.

Publicación traducida automáticamente

Artículo escrito por prernaajitgupta 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 *