Comparar Arrays em C++

  1. Utilize a declaração for Loop para comparar arrays em C++
  2. Utilizar a Função Definida Personalizada para Comparar Arrays em C++
  3. Utilizar o algoritmo std::equal para comparar arrays em C++

Este artigo irá demonstrar múltiplos métodos de como comparar matrizes em C++.

Utilize a declaração for Loop para comparar arrays em C++

Nestes exemplos, utilizaremos um contentor de matriz variável - std::vector. Esta classe tem um operador incorporado == que podemos utilizar para comparar os dois conteúdos de vectores dados. Neste caso, não precisamos de nos preocupar com diferentes comprimentos de vectores, uma vez que estes são tratados pelo método internamente. O valor de retorno é booleano com true, implicando dois comprimentos vectoriais iguais.

Note-se que avaliamos a expressão com ? : declaração condicional e impressão das mensagens de string correspondentes para a consola.

#include <iostream>
#include <vector>

using std::cout; using std::cin;
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;
}

Resultado:

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

Utilizar a Função Definida Personalizada para Comparar Arrays em C++

O método anterior pode ser generalizado na função de modelo do utilizador, e se necessário, podem ser adicionados códigos de retorno personalizados e tratamento de excepções. Neste exemplo, implementámos a função compareVectorContents que toma duas referências vector e avalia a condição de igualdade utilizando a estrutura if.

#include <iostream>
#include <vector>

using std::cout; using std::cin;
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

Utilizar o algoritmo std::equal para comparar arrays em C++

Outro método para comparar conteúdos de dois vectors é o algoritmo std::equal da biblioteca padrão C++, definido no ficheiro de cabeçalho <algorithm>. O método equal toma 4 parâmetros que representam 2 intervalos separados que precisam de ser comparados, fornecendo assim uma interface mais genérica para lidar com as comparações. Este método pode ser utilizado em intervalos formados com iteradores a partir de recipientes não ordenados, nomeadamente - std::unordered_set, std::unordered_map etc. O valor de retorno equal é booleano e retorna true se os elementos forem os mesmos em dois intervalos. Além disso, a função retorna false se os intervalos passados diferirem em comprimentos.

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

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

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

Resultado:

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

Artigo relacionado - C++ Array

  • Obter Comprimento do Array em C++
  • Como passar o 2D Array para uma função em C++