std :: igual () en C ++

En este artículo, vamos a ver C función STL ++ igual () que se utiliza para comprobar si dos rangos de secuencia tienen el mismo contenido o no.

igual () como una función STL

Sintaxis:

bool equal(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2);

Cuando,

  • InputIterator1 primera = iterador de inicio de la primera gama secuencia
  • InputIterator1 last1 = iterador a extremo de la primera gama secuencia
  • InputIterator2 primero2 = iterador para inicio de la segunda gama secuencia

class escribir: bool

  • cierto – si todos los elementos son los mismos en ambos de los rangos
  • Falso – Si todos los elementos no son los mismos en ambos de los rangos

la sintaxis anterior se usa para comparar elementos utilizando operador estándar == .

También podemos definir nuestro predicado binario definido por el usuario (en lugar de ‘==’) comprobación de si class iguales o no. La sintaxis con predicado binario definido por el usuario es, como a continuación:

(. Binary predicado es una función que toma dos argumentos y devuelve verdadero o falso solamente)

bool equal(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
BinaryPredicate pred);

Uso de la sintaxis anterior se comprueban los elementos de los rangos correspondientes mediante el predicado.

Así que, como descubrimos el último iterador class el segundo rango no se comparte, ya que comparará sólo el mismo número de elementos como de rango 1. Además, se comprobará de forma secuencial, lo que significa [1,3,5] y [5,3,1] no son lo mismo. Así que tiene que estar en el mismo orden class tanto la gama.

1) Usando class ‘==’ / operador

#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> arr1{ 3, 2, 1, 4, 5, 6, 7 };
vector<int> arr2{ 3, 2, 1, 4, 5 };
if (equal(arr1.begin(), arr1.begin() + 5, arr2.begin())) {
cout << "both ranges are exactly equal n";
}
else
cout << "both ranges are not exactly equal n";
vector<int> arr3{ 1, 2, 3, 4, 5, 6, 7 };
vector<int> arr4{ 1, 2, 3, 4, 5 };
if (equal(arr3.begin(), arr3.end(), arr4.begin())) {
cout << "both ranges are exactly equal n";
}
else
cout << "both ranges are not exactly equal n";
return 0;
}

salida ‘=’:

both ranges are exactly equal
both ranges are not exactly equal

En el programa anterior, hemos comprobado dos casos y hemos utilizado el comparador Return. En la primera class,

La primera gama se arr1.begin () para arr1.begin () + 5, es decir, sólo los primeros cinco elementos de arr1. La segunda gama de aperturas de arr2.begin () y se comprobarán los primeros cinco elementos sólo de la partida de range2. Ya que ambos son la misma por lo tanto se trata de un partido.

[3,2,1,4,5]

En el segundo for ya que fuimos for la gama total de arr3, por lo que fue una falta de coincidencia.

2) Usando la función de comparación definida por el usuario

Aquí hemos dado un uso for donde tenemos dos vectores default Datos del estudiante con cinco alumnos cada uno. Mediante el uso de nuestro usuario definido predecir que vamos a comprobar si las dos listas son iguales o no. Tanto la lista se dice que son iguales si cada uno de los partidos Detalles del estudiante. Para tener un partido default detalles de estudiantes, todos los detalles (rollo, nombre, puntuación) necesidad de ser el mismo.

#include <bits/stdc++.h>
using namespace std;
class student {
int score;
int roll;
string name;
public:
student()
{
score = 0;
roll = 0;
name = "";
}
student(int sc, int ro, string nm)
{
score = sc;
roll = ro;
name = nm;
}
int get_score()
{
return score;
}
int get_roll()
{
return roll;
}
string get_name()
{
return name;
}
};
bool pred(student a, student b)
{
//if all details are same return true else false
if (a.get_name() == b.get_name() && a.get_score() == b.get_score() && a.get_roll() == b.get_roll())
return true;
return false;
}
int main()
{
//1st list
vector<student> arr1(5);
//1st student
arr1[0] = student(80, 5, "XYZ"); //roll 5, marks 80
//2nd student
arr1[1] = student(70, 10, "INC"); //roll 10, marks 70
//3rd student
arr1[2] = student(85, 7, "HYU"); //roll 7, marks 85
//4th student
arr1[3] = student(83, 1, "EFG"); //roll 1, marks 83
//5th student
arr1[4] = student(81, 11, "ABC"); //roll 11, marks 81
//2nd list
vector<student> arr2(5);
//1st student
arr2[0] = student(80, 5, "XYZ"); //roll 5, marks 80
//2nd student
arr2[1] = student(70, 10, "INC"); //roll 10, marks 70
//3rd student
arr2[2] = student(85, 7, "HYU"); //roll 7, marks 85
//4th student
arr2[3] = student(83, 1, "EFG"); //roll 1, marks 83
//5th student
arr2[4] = student(81, 11, "ABC"); //roll 11, marks 81
//find check both lists are equal or not
//based on user-defined predicate
if (equal(arr1.begin(), arr1.end(), arr2.begin(), pred))
cout << "Both lists arr1,arr2 are equaln";
else
cout << "Both lists arr1,arr2 are not equaln";
//3rd list
vector<student> arr3(5);
//1st student
arr3[0] = student(89, 5, "PVR"); //roll 5, marks 89
//2nd student
arr3[1] = student(70, 10, "INC"); //roll 10, marks 70
//3rd student
arr3[2] = student(85, 7, "HYU"); //roll 7, marks 85
//4th student
arr3[3] = student(83, 1, "EFG"); //roll 1, marks 83
//5th student
arr3[4] = student(81, 11, "ABC"); //roll 11, marks 81
//find check both lists are equal or not based
//on user-defined predicate
if (equal(arr1.begin(), arr1.end(), arr3.begin(), pred))
cout << "Both lists arr1,arr3 are equaln";
else
cout << "Both lists arr1,arr3 are not equaln";
return 0;
}

Salida:

Both lists arr1,arr2 are equal
Both lists arr1,arr3 are not equal

Aquí hemos creado primero dos listas con los mismos elementos. Dado que ambas listas son de igual tamaño que por eso nos encontramos igual a case cierto. case la segunda for, hemos alterado un elemento en arr3 hacer desigual y la misma se refleja en la salida. En nuestro predicado definido por el usuario, hemos vuelto verdad todo si todos los datos emparejados case dos estudiantes.

Así que en este artículo, se vio la eficiencia con que podemos utilizar para comprobar la igualdad de dos rangos son iguales o no. Una aplicación de esto se puede comprobar si una matriz es submatriz de la otra o no.


Deja un comentario

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