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 
37
demandé sur Saurav Sahu 2013-05-07 19:09:01

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.

53
répondu Andy Prowl 2015-05-11 18:06:18

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.

6
répondu Joseph Mansfield 2013-05-07 15:12:44

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

2
répondu taocp 2013-05-07 15:14:50

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
2
répondu Tony 2017-05-23 12:26:07

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.

1
répondu huskerchad 2013-05-07 15:15:03

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.

1
répondu Mats Petersson 2013-05-07 15:17:03