Sortieren von Vektoren basierend auf einem externen Referenzvektor
In Situationen, in denen mehrere Vektoren gleicher Länge vorhanden sind, erfordert das Sortieren eines Vektors eine Lösung, die transformiert gleichzeitig alle anderen Vektoren entsprechend.
Bedenken Sie Folgendes Szenario:
std::vector<int> Index = { 3, 1, 2 }; std::vector<std::string> Values = { "Third", "First", "Second" };
Transformation: Index ist sortiert.
Erwartetes Ergebnis: Werte sollten ebenfalls sortiert sein.
Ein Ansatz besteht darin, einen Vektor zu erstellen, der sowohl den Originalindex als auch die Elemente aus dem Sortierdiktat enthält Vektor:
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);
Als nächstes wird dieser Vektor sortiert:
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());
Die Sortierreihenfolge ermöglicht die Neuanordnung anderer Vektoren:
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; }
Das obige ist der detaillierte Inhalt vonWie sortiere ich mehrere Vektoren gleichzeitig basierend auf einem Referenzvektor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!