Sortieren von Vektoren basierend auf Werten aus einem anderen Vektor
Stellen Sie sich ein Szenario vor, in dem Sie mehrere Vektoren derselben Länge haben und dies möchten Sortieren Sie einen Vektor nach einer bestimmten Reihenfolge, während Sie dieselbe Permutation auf die anderen Vektoren anwenden. Dies stellt die Herausforderung dar, dieses Sortiermuster über mehrere Vektoren hinweg zu nutzen.
Lösung
Um einen Vektor nach Werten aus einem anderen Vektor zu sortieren, können Sie eine benutzerdefinierte Methode verwenden Sortierer und verwenden Sie einen Vektor, der den Index jedes Elements mit seinem entsprechenden Wert im Sortiervektor koppelt.
typedef vector<int>::const_iterator myiter; vector<pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (myiter it = Index.begin(); it != Index.end(); ++it, ++n) order[n] = make_pair(n, it); struct ordering { bool operator ()(pair<size_t, myiter> const& a, pair<size_t, myiter> const& b) { return *(a.second) < *(b.second); } }; sort(order.begin(), order.end(), ordering());
Sobald Sie die Sortierung haben Bei der Sortierung können Sie dies als Nachschlagetabelle für den neuen Index jedes Elements in den anderen Vektoren verwenden.
template <typename T> vector<T> sort_from_ref( vector<T> const& in, vector<pair<size_t, myiter>> const& reference ) { vector<T> ret(in.size()); size_t const size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
Durch die Anwendung dieses Prozesses können Sie den Zielvektor effektiv sortieren und dieselbe Transformation auf den anwenden entsprechende Elemente in den anderen Vektoren.
Das obige ist der detaillierte Inhalt vonWie sortiere ich mehrere Vektoren basierend auf den Werten eines einzelnen Vektors?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!