Stellen Sie sich ein Szenario vor, in dem Sie mehrere Vektoren derselben Länge haben und einen der Vektoren unter Beibehaltung derselben sortieren müssen Sortierreihenfolge über alle anderen Vektoren hinweg. Dies kann nützlich sein, wenn die sortierten Werte als Referenzen für die Elemente in den anderen Vektoren dienen.
Im bereitgestellten Codeausschnitt haben wir zwei Vektoren: Index und Werte. Der Index enthält Ganzzahlen, die die gewünschte Sortierreihenfolge angeben, und Werte enthalten Zeichenfolgen, die entsprechend sortiert werden.
Ein Ansatz besteht darin, einen Vektor von Paaren zu erstellen, der die Elemente von Index und Werten kombiniert, und diesen Vektor dann mithilfe von a zu sortieren benutzerdefinierter Komparator. So würden Sie es machen:
using myiter = std::vector<int>::const_iterator; std::vector<std::pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (const auto& it : Index) { order[n++] = std::make_pair(n, it); } struct ordering { bool operator()(const std::pair<size_t, myiter>& a, const std::pair<size_t, myiter>& b) { return *a.second < *b.second; } }; std::sort(order.begin(), order.end(), ordering());
Der Ordnungsvektor enthält jetzt die Elemente aus Index und Werten in der sortierten Reihenfolge. Sie können damit auch die anderen Vektoren sortieren. Hier ist eine Funktionsvorlage, die das tut:
template <typename T> std::vector<T> sort_from_ref( const std::vector<T>& in, const std::vector<std::pair<size_t, myiter>>& reference ) { std::vector<T> ret(in.size()); size_t size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
Mit dieser Funktion können Sie jetzt die sortierte Version von Werten basierend auf der durch Index angegebenen Reihenfolge erhalten:
std::vector<std::string> sortedValues = sort_from_ref(Values, order);
Dieser Ansatz ermöglicht Sie können mehrere Vektoren effizient und konsistent sortieren, ohne dass komplexe und iterative Lösungen erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie sortiere ich mehrere Vektoren konsistent basierend auf einem Referenzvektor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!