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
Patricia ArquetteOriginal
2024-12-14 15:50:11476Durchsuche

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());

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!

Stellungnahme:
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