Einen Vektor mit Werten in einem anderen Vektor sortieren

8

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?

    
Karnivaurus 13.12.2015, 01:17
quelle

2 Antworten

4

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.

    
Kerrek SB 13.12.2015, 01:28
quelle
2

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.

    
Soren 13.12.2015 01:25
quelle

Tags und Links