Ich benutze Sätze. Ich benutze eine benutzerdefinierte Struktur als Schlüssel. Ich füge einen Wert ein und versuche den eingegebenen Wert zu finden. Aber es scheint nie das Element zu finden.
Ich habe sowohl den == Operator als auch den & lt; Betreiber.
Hier ist der Code der Struktur:
%Vor%Und das ist der Code von main
%Vor%Es schlägt immer in der assert-Anweisung fehl. Was mache ich falsch?
Edit -Ok jetzt verstehe ich, dass es den Operator == überhaupt nicht verwendet. Hier ist was ich will. Ich brauche die Datenstruktur nach Entfernung sortiert. Aber ich sollte es mit der ID entfernen können. Gibt es dafür einen sauberen Weg oder eine bereits vorhandene Datenstruktur?
Dies schlägt fehl, weil Ihr Kleiner-als-Vergleich distance_t::distance
verwendet, den Sie nicht in findDistance
:
std :: set verwendet operator==
für nichts. Es verwendet nur operator<
. Sie müssten also seine Logik ändern, um distance_t::id
zu verwenden.
Wenn Sie nach id
suchen möchten, ohne die Reihenfolge des Sets zu ändern, können Sie std :: find
Dies wird Ihre operator==
verwenden. Bedenken Sie, dass dies lineare Zeitkomplexität hat.
Weil operator==
überhaupt nicht aufgerufen wird. Vergleichen von Elementen ist wie folgt:
Mit anderen Worten, es verwendet operator<
.
Da Sie findDistance.distance
keinen Wert zugewiesen haben, ist das Ergebnis des weniger als Vergleichs nicht definiert.
Beachten Sie, dass Ihre Definitionen der Operatoren "Gleichheit" und "weniger als Vergleich" gefährlich sind, da es einfach ist, Instanzen von distance_t
zu definieren, deren Ergebnis inkonsistent ist. Ein Beispiel sind zwei Instanzen mit derselben Entfernung, aber unterschiedlichen IDs.