Puis-je utiliser '== ' pour comparer deux vecteurs. Je l'ai essayé et semble fonctionner correctement. Mais je ne sais pas si ça marchera dans des situations plus complexes.
premier exemple:
int main(){
using namespace std;
vector<int> v1{10, 20, 30, 40, 50};
vector<int> v2{10, 20, 30, 40, 50};
if(v1==v2)
cout<<"equal";
else
cout<<"unequal";
} // it returns equal
Second exemple:
int main(){
using namespace std;
vector<int> v1{10, 20, 30, 40, 50};
vector<int> v2{10, 20, 100000, 40, 50};
if(v1==v2)
cout<<"equal";
else
cout<<"unequal";
} // it returns notequal
6 réponses
le surcharge de operator ==
qui fonctionne sur deux std::vector
s comparera les tailles de vecteur et retournera false
si celles-ci sont différentes; sinon, il comparera le contenu du vecteur élément-par-élément.
si operator ==
est défini pour le type d'élément du vecteur, alors la comparaison des vecteurs par operator ==
est valide et significative.
en termes formels, la norme C++11 spécifie la sémantique opérationnelle de a == b
pour les conteneurs séquentiels as (tableau 96, paragraphe 23.2.1):
==
est une équivalence relation.
distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(), b.begin())
comme vous pouvez le voir, l'égalité entre les conteneurs de séquence est définie en termes de std::equal
algorithme entre les plages définies par des paires d'itérateurs, qui à son tour utilise operator ==
pour la comparaison des éléments individuels.
Oui, vous pouvez utiliser operator==
pour comparer deux std::vector
s. Il ne retournera true
que si les vecteurs sont de la même taille et que tous les éléments sont égaux.
vous pouvez vérifier la documentation de operator==
pour le vecteur: operator==,!=,<,<=,>,>=(std:: vecteur)
citant le lien:
template< class T, class Alloc >
bool operator==( vector<T,Alloc>& lhs,
vector<T,Alloc>& rhs );
compare le contenu de deux récipients.
vérifie si le contenu de lhs et rhs est égal, c'est-à-dire si lhs.size () = = rhs.taille () et chaque élément dans lhs a l'élément équivalent dans rhs à la même position.
paramètres:
lhs, rhs conteneurs dont le contenu à comparer ""
T doivent satisfaire aux exigences de EqualityComparable afin d'utiliser les versions
valeur de retour
vrai si le contenu des conteneurs est équivalent, faux sinon
soyez avisé que les vecteurs ne sont pas ordonnés, donc en utilisant l'opérateur std::equal ou "= = " ne peut normalement pas être utilisé pour assurer une comparaison correcte de si deux vecteurs contiennent les mêmes éléments, mais dans un ordre différent. Ils comparent que les vecteurs ont les mêmes contenus dans le même ordre (mais pas dans un ordre différent).
pour de nombreux cas d'utilisation cela pourrait être suffisant. Mais il pourrait y avoir des occasions où vous voulez savoir si deux vecteurs ont le même contenu mais pas forcément dans le même ordre. Pour ce cas, vous avez besoin d'une autre fonction.
Une belle et courte mise en œuvre est celle ci-dessous.
Il a été suggéré ici: /q/comment-faire-efficacement-comparer-les vecteurs-avec-c-42705/"même" << std::endl;
autre
std::cout << "pas même" << std::endl;
si (std:: égal(vector1.begin(), vector1.end (), vector2.commencer()))
std::cout << "même" << std::endl;
autre
std::cout << "pas même" << std::endl;
si (compareVectors (vector1, vector2))
std::cout << "même" << std::endl;
autre
std::cout << "pas même" << std::endl;
la sortie sera: not same
not same
same
Oui. Une bonne référence est cppreference.com , où vous pouvez chercher operator==
pour vector<T>
, par exemple sur cette page: opérateurs non membres , et vous trouverez:
vérifie si le contenu de lhs et rhs est égal, c'est-à-dire si de gauche.size () = = rhs.taille() et chaque élément de g est équivalent élément rhs à la même position.
tant Que vecteur contient des éléments qui peuvent être comparées (ont operator==
), cela fonctionne, oui. Notez cependant que si vous avez un vecteur qui contient par exemple des pointeurs vers des objets identiques, mais pas la même instance d'un objet, alors le vecteur n'est pas considéré comme identique, parce que l'élément dans le vecteur est ce qui est comparé, pas le contenu de l'élément en tant que tel, si cela a du sens.