Kann ich '==' verwenden, um zwei Vektoren zu vergleichen? Ich habe es versucht und scheint gut zu funktionieren. Aber ich weiß nicht, ob es in komplexeren Situationen funktionieren wird
Erstes Beispiel:
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
Zweites Beispiel:
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
InformationsquelleAutor der Frage suman shadow | 2013-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den überladung von
operator ==
, das funktioniert auf zweistd::vector
s vergleichen Sie die Vektor-Größen und zurückfalse
wenn diese unterschiedlich sind; wenn nicht, wird Sie vergleichen den Inhalt des Vektor-element-by-element.Wenn
operator ==
definiert ist, für die der Vektor der element-Typ, dann wird der Vergleich der Vektoren durchoperator ==
ist gültig und sinnvoll.In der formalen Bedingungen, die C++11-standard gibt die operationelle Semantik von
a == b
für Sequenz-Containern (Tabelle 96, § 23.2.1):Wie Sie sehen können, die Gleichstellung von Sequenz-Container ist definiert in Bezug auf die
std::equal
Algorithmus zwischen Bereiche definiert, die durch Paare von Iteratoren, die wiederum verwendetoperator ==
für den Vergleich der einzelnen Elemente.InformationsquelleAutor der Antwort Andy Prowl
Ja, Sie können
operator==
zum vergleichen von zweistd::vector
s. Wird es wiedertrue
nur, wenn die Vektoren die gleiche Größe und alle Elemente vergleichen gleich.InformationsquelleAutor der Antwort Joseph Mansfield
Können Sie überprüfen Sie die Dokumentation
operator==
für vector: operator==,!=,<,<=,>,>=(std::vector)Zitat aus dem link:
InformationsquelleAutor der Antwort taocp
Beachten Sie, dass die Vektoren sind nicht geordnet, also mit std::oder gleich "= = " - operator können in der Regel nicht verwendet werden, um zu gewährleisten, dass richtige Vergleich, wenn zwei Vektoren enthalten die gleichen Elemente, aber in verschiedener Reihenfolge.
Tun Sie, vergleichen Sie, dass die Vektoren haben den gleichen Inhalt in der gleichen Reihenfolge (aber nicht in der anderen Reihenfolge).
Für viele Anwendungsfälle kann dies ausreichend sein.
Aber möglicherweise gibt es Gelegenheiten, wenn Sie wissen möchten, ob zwei Vektoren haben den gleichen Inhalt, aber nicht unbedingt in der gleichen Reihenfolge.
Für diesem Fall benötigen Sie eine weitere Funktion.
Eine nette und kurze Einführung ist der unten.
Es wurde hier vorgeschlagen: https://stackoverflow.com/questions/17394149/how-to-efficiently-compare-vectors-with-c/17394298#17394298
Dort findest du auch eine Diskussion über, warum Sie vielleicht nicht wollen, es zu benutzen...
Diese in einer header-Datei Ihrer Wahl:
Und hier ein Beispiel zur Veranschaulichung der oben genannten Theorie:
Ist die Ausgabe:
InformationsquelleAutor der Antwort Tony
Ja. Eine gute Referenz ist cppreference.com, wo Sie nachschlagen können
operator==
fürvector<T>
zum Beispiel auf dieser Seite: non-member-Betreiber, und Sie werden feststellen:InformationsquelleAutor der Antwort huskerchad
So lang wie der Vektor Elemente enthält, die in sich selbst verglichen werden kann (haben
operator==
), das funktioniert, ja. Beachten Sie jedoch, dass, wenn Sie einen Vektor, enthält zum Beispiel Zeiger auf identische Objekte, aber nicht die GLEICHE Instanz eines Objektes, dann wird der Vektor nicht als identisch, da das element im vector ist, was verglichen wird, nicht den Inhalt des Elements als solche, wenn das Sinn macht.InformationsquelleAutor der Antwort Mats Petersson