Compare los arrays en C++

Jinku Hu 12 octubre 2023
  1. Utilice la instrucción de bucle for para comparar arrays en C++
  2. Usar la función definida por el usuario para comparar arrays en C++
  3. Usa el algoritmo std::equal para comparar matrices en C++
Compare los arrays en C++

Este artículo demostrará múltiples métodos de cómo comparar matrices en C++.

Utilice la instrucción de bucle for para comparar arrays en C++

En estos ejemplos, utilizaremos un contenedor de array variable - std::vector. Esta clase tiene un operador incorporado == que podemos usar para comparar los dos vectores dados. En este caso, no tenemos que preocuparnos por las diferentes longitudes de los vectores, ya que se manejan por el método internamente. El valor de retorno es booleano con true, lo que implica la igualdad de dos vectores.

Note que evaluamos la expresión con ? : declaración condicional e imprimimos los mensajes de cadena correspondientes a la consola.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec2 = {12, 32, 43, 53, 23, 25};
  vector<int> i_vec3 = {12, 32, 43, 53, 23, 65};

  i_vec1 == i_vec2
      ? cout << "Vectors i_vec1 and i_vec2 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec2 are not the same" << endl;

  i_vec1 == i_vec3
      ? cout << "Vectors i_vec1 and i_vec3 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec3 are not the same" << endl;

  return EXIT_SUCCESS;
}

Producción :

Vectors i_vec1 and i_vec2 are not the same
Vectors i_vec1 and i_vec3 are the same

Usar la función definida por el usuario para comparar arrays en C++

El método anterior puede generalizarse en la función de plantilla del usuario y, si es necesario, pueden añadirse códigos de retorno personalizados y manejo de excepciones. En este ejemplo, hemos implementado la función compareVectorContents que toma dos referencias vector y evalúa la condición de igualdad usando la estructura if.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
bool compareVectorContents(vector<T> &vec1, vector<T> &vec2) {
  if (vec1 == vec2) {
    return true;
  } else {
    return false;
  }
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec3 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec4 = {12, 32, 43};

  compareVectorContents(i_vec1, i_vec3)
      ? cout << "Vectors i_vec1 and i_vec3 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec3 are not the same" << endl;

  compareVectorContents(i_vec1, i_vec4)
      ? cout << "Vectors i_vec1 and i_vec4 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec4 are not the same" << endl;

  return EXIT_SUCCESS;
}
Vectors i_vec1 and i_vec3 are the same
Vectors i_vec1 and i_vec4 are not the same

Usa el algoritmo std::equal para comparar matrices en C++

Otro método para comparar el contenido de dos vectores es el algoritmo std::equal de la biblioteca estándar de C++, definido en el archivo de cabecera <algorithm>. El método equal toma 4 parámetros que representan 2 rangos separados que deben ser comparados, proporcionando así una interfaz más genérica para tratar las comparaciones. Este método puede ser empleado en rangos formados con iteradores de contenedores no ordenados, a saber - std::unordered_set, std::unordered_map etc. El valor de retorno equal es booleano y devuelve true si los elementos son iguales en dos rangos. Además, la función devolverá false si los rangos pasados difieren en longitudes.

#include <algorithm>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::equal;
using std::string;
using std::vector;

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec2 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec3 = {12, 32, 43};

  equal(i_vec1.begin(), i_vec1.end(), i_vec2.begin(), i_vec2.end())
      ? cout << "Vectors i_vec1 and i_vec2 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec2 are not the same" << endl;
  equal(i_vec1.begin(), i_vec1.end(), i_vec3.begin(), i_vec3.end())
      ? cout << "Vectors i_vec1 and i_vec3 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec3 are not the same" << endl;

  return EXIT_SUCCESS;
}

Producción :

Vectors i_vec1 and i_vec2 are the same
Vectors i_vec1 and i_vec3 are not the same
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Array