Ich habe eine std::vector
namens foo_vec
mit Objekten der Klasse Foo
. Angenommen, Foo
hat eine Mitgliedsvariable int x
, und ich habe auch eine Funktion CompareInts(int a, int b)
implementiert, die das Minimum von a
und b
zurückgibt. Dann könnte ich einen std::sort
des Vektors in Bezug auf die x
-Werte des Objekts machen.
Wie auch immer, wenn diese x
-Werte keine Mitgliedsvariablen von Foo
sind, sondern sich in einem anderen std::vector
namens x_vec
befinden. Hier entspricht das erste Element von x_vec
dem ersten Element von foo_vec
und so weiter. Wie kann ich ein std::sort
auf foo_vec
basierend auf den entsprechenden Werten in x_vec
ausführen?
Sie können einen dritten Vektor von Indizes erstellen und diesen indirekt sortieren. Nach dem Sortieren können Sie über die sortierten Indizes auf den Originalvektor zugreifen:
%Vor%Beachten Sie, dass diese Operation nicht invasiv ist, da alles indirekt geschieht.
Sie erstellen einen dritten Vektor von int, die die Indizes in die ursprünglichen zwei Vektoren sind. Füllen Sie zunächst den dritten Vektor mit der Nummer 0 .. Länge des Vektors. Dann konstruiere deine Vergleichsfunktion, um den Index aus dem dritten Vektor zu nehmen, und vergleiche dann den Vergleich mit dem zweiten Vektor, der die Schlüssel hält.
Die Daten im ersten und zweiten Vektor werden nicht verändert (was gut ist) und die Werte im dritten Vektor werden die einmal vorgenommene Sortierreihenfolge darstellen.
Tags und Links c++