Heim > Backend-Entwicklung > C++ > Wie sortiere ich mehrere Vektoren konsistent basierend auf einem Referenzvektor?

Wie sortiere ich mehrere Vektoren konsistent basierend auf einem Referenzvektor?

Patricia Arquette
Freigeben: 2024-12-14 15:50:11
Original
474 Leute haben es durchsucht

How to Sort Multiple Vectors Consistently Based on a Reference Vector?

Sortieren von Vektoren basierend auf Werten eines anderen Vektors

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());
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage