Ich verwende std::mismatch
, um zu überprüfen, ob zwei Vektoren von Strukturen genau gleich sind. In meinem Programm sind sie normalerweise nicht, aber in Ausnahmefällen kann es passieren. Im documentation finde ich folgendes:Rückgabewert std :: Mismatch für gleiche Vektoren
„wenn die verglichenen Elemente in beiden Sequenzen alle aufeinander abgestimmt sind, wird die Funktion ein Paar mit dem ersten Satz kehrt in der gleichen relativen Position in dem zweiten und dem zweiten Satz zu dem Element last1 Sequenz."
Wenn ich jedoch zwei vollständig identische Vektoren erzeuge, gibt std :: mismatch keinen Wert zurück. Ein kleines Beispiel von dem, was ich zu tun versucht:
#include <vector>
#include <algorithm>
#include <utility>
struct structwithnumber {
int id;
};
bool compare_structs (structwithnumber* struct1, structwithnumber* struct2) {
return struct1->id == struct2->id;
};
bool compare_structvectors(std::vector<structwithnumber*> v1, std::vector<structwithnumber*> v2) {
if (v1.size() != v2.size())
{
return false;
}
std::pair<std::vector<structwithnumber*>::iterator, std::vector<structwithnumber*>::iterator> mypair;
mypair = std::mismatch(v1.begin(), v1.end(), v2.begin(), compare_structs);
return (compare_structs(*mypair.first, *mypair.second));
}
void simple_example() {
structwithnumber* struct1 = new structwithnumber();
structwithnumber* struct2 = new structwithnumber();
struct1->id = 1;
struct2->id = 2;
std::vector<structwithnumber*> v1;
std::vector<structwithnumber*> v2;
v1.push_back(struct1);
v1.push_back(struct2);
v2.push_back(struct1);
v2.push_back(struct2);
compare_structvectors(v1, v2);
}
Wenn ich diesen Code in Visual Studios laufen 15 Ich erhalte eine Fehlermeldung auf der Linie:
return (compare_structs(*mypair.first, *mypair.second));
Bei der weiteren Untersuchung stellt sich mypair bleibt aus leer nach Nichtübereinstimmung Aus der Dokumentation würde ich jedoch den letzten Wert jedes Vektors zurückgeben. Habe ich falsch verstanden, wie sich Mismatch verhalten würde, wenn zwei Sequenzen dargestellt werden, in denen alle Elemente übereinstimmen?
„Ich erhalte eine Fehlermeldung“ - sollten Sie das die Art des Fehlers mit dem Publikum zu teilen? (Kopieren und Einfügen aus dem Ausgabefenster.) – molbdnilo
Und [hier] (http://en.cppreference.com/w/cpp/algorithm/mismatch) ist eine zuverlässigere Referenzseite. – molbdnilo