Vektor-iterator-Vergleich
Ich habe ein problem beim vergleichen der Werte in zwei Vektoren.
Folgenden wird der Beispiel-code von meinem Programm:
template <typename T> bool CompareVectors(std::vector<T> vector1, std::vector<T> vector2)
{
std::sort(vector1.begin(),vector1.end());
std::sort(vector2.begin(),vector2.end());
if (vector1.size() != vector2.size())
return false;
else
{
bool found = false;
std::vector<T>::iterator it;
std::vector<T>::iterator it2;
for (it = vector1.begin();it != vector1.end(); it++)
{
for(it2 = vector2.begin(); it2 != vector2.end(); it2++)
{
if(it == it2) //here i have to check the values in the itearators are equal.
{
found = true;
break;
}
}
if(!found)
return false;
else
found = false;
}
return true;
}
};
In diesem Beispiel-code habe ich zum vergleichen von zwei Vektoren. Dafür habe ich sortiert, die zwei Vektoren mit std::sort()
. Da der Datentyp vector ist ein template (ich verwende eine class-Objekt im vector), die std::sort()
wird nicht richtig funktionieren. Sprich, manchmal sind die beiden Vektoren unterschiedliche Reihenfolge der Elemente nach dem Sortieren.
So, ich bin nicht in der Lage zu verwenden, die std::equal()
Funktion auch.
Für eine alternative Lösung, ich habe zwei Iteratoren für die twi-Vektoren.
Und Durchlaufen ein Vektor und sucht das element des anderen Vektors. Für dieses iterator-Vergleich ist nicht brauchbar.
operator<
für die Sortierung ? Es ist wohl das problem ... Meine Wette ist, Sie haben einen Vektor von Zeigern und dass Ihre Elemente sortiert werden, indem Sie Ihre Adresse anstelle Ihrer Werte.Haben Sie definiert die
<
und ==
- operator für die Klasse, die Sie verwenden?yaa ich definiert haben,== , < , != Operatoren für die Klasse, die ich verwende, Ja... ich bin mit poinetr element in den Vektoren für den Vergleich.So das ist das problem mit std::Sortieren. Es ist also eine Sortierung mit Adresse.
InformationsquelleAutor Aneesh Narayanan | 2012-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, Sie haben zu verwenden
typename
Stichwort:ohne
typename
dein code gar nicht kompilieren.Vergleichen Werte Spitzen, von Iteratoren, die Sie haben, dies zu tun:
Könnten Sie schreiben, Sie vergleichen die Funktion als:
Anstatt der überprüfung der Größe und den Aufruf
std::equal
Sie können einfach sagenreturn v1 == v2;
Das ist gut. Ich wusste nicht, dass es existiert
==
nicht-Mitglied-Funktion zum testen der Gleichheit von zwei Vektoren.InformationsquelleAutor Nawaz
Sollte diese Zeile:
werden
Die erste Zeile ist der Vergleich der Zeiger, nicht die Werte.
InformationsquelleAutor user1263270
Gibt es mehrere Probleme hier. Erste, Sie sagen, dass
std::sort()
funktioniert nicht. Haben Sie überladen dieoperator<
für Ihre Klasse?Auch, Sie brauchen, um zu vergleichen, was Iteratoren sind zeigen:
Weiter, Sie brauchen, um die Iteration über beide arrays gleichzeitig (nur eine Schlaufe):
Aber wirklich, man sollte Sie nur verwenden
std::equal()
durch überlastung desoperator==
.Und von einer Effizienz-Standpunkt aus, Sie sollten vergleichen Sie die
size()
Werte vor Sie sich die Mühe machen, das Sortieren der arrays.InformationsquelleAutor chrisaycock