Si noti che i vettori non sono ordinati, quindi l'uso di std :: equal o l'operatore "==" non può essere utilizzato normalmente per assicurare un confronto corretto di se due vettori contengono gli stessi elementi ma in ordine diverso. Confronta che i vettori hanno gli stessi contenuti nello stesso ordine (ma non in ordine diverso).
Per molti casi d'uso questo potrebbe essere sufficiente. Ma potrebbero esserci occasioni in cui vuoi sapere se due vettori hanno gli stessi contenuti ma non necessariamente nello stesso ordine. In questo caso è necessaria un'altra funzione.
Una bella e breve implementazione è quella sotto. E 'stato suggerito qui: https://stackoverflow.com/questions/17394149/how-to-efficiently-compare-vectors-with-c/17394298#17394298 Vi si possono trovare anche una discussione sul perché non si potrebbe desiderare di usarlo ...
mettere questo in un file di intestazione della vostra scelta:
#include <algorithm>
template <class T>
static bool compareVectors(std::vector<T> a, std::vector<T> b)
{
if (a.size() != b.size())
{
return false;
}
::std::sort(a.begin(), a.end());
::std::sort(b.begin(), b.end());
return (a == b);
}
E qui un esempio che illustra la teoria di cui sopra:
std::vector<int> vector1;
std::vector<int> vector2;
vector1.push_back(100);
vector1.push_back(101);
vector1.push_back(102);
vector2.push_back(102);
vector2.push_back(101);
vector2.push_back(100);
if (vector1 == vector2)
std::cout << "same" << std::endl;
else
std::cout << "not same" << std::endl;
if (std::equal(vector1.begin(), vector1.end(), vector2.begin()))
std::cout << "same" << std::endl;
else
std::cout << "not same" << std::endl;
if (compareVectors(vector1, vector2))
std::cout << "same" << std::endl;
else
std::cout << "not same" << std::endl;
l'output sarà:
not same
not same
same
Penso che l'ultima piccola informazione necessaria qui: se si ordina il proprio vettore, funziona. prova questo: std :: sort (vector.begin(), vector.end()); – AnyOneElse
@AnyOneElse Non si dovrebbe fare questo per il test di uguaglianza dei vettori poiché l'ordine degli elementi di un vettore è importante, due vettori con gli stessi elementi ma in un ordine diverso non sono matematicamente uguali. Tuttavia, se si desidera trattare l'uguaglianza dei vettori in modo tale che l'ordine degli elementi non sia importante, l'ordinamento prima del confronto è una possibile soluzione. – GBlomqvist