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