Heim >Backend-Entwicklung >C++ >Wie kann ich Daten in C unter Beibehaltung der Originalindizes sortieren?
Sortieren von Daten unter Beibehaltung der Originalpositionen in C
In C besteht häufig die Notwendigkeit, eine Sammlung von Elementen unter Beibehaltung ihrer Originalpositionen zu sortieren . Dies ist entscheidend, wenn externe Faktoren von diesen Positionen abhängen.
Betrachten Sie den Stichprobensatz A = [5, 2, 1, 4, 3]. Das Sortieren dieser Menge mit der Standardsortierfunktion würde B = [1,2,3,4,5] ergeben. Wir möchten jedoch auch die ursprünglichen Indizes der sortierten Elemente verfolgen, was zur Menge C = [2, 1, 4, 3, 0] führt, die den Index jedes Elements in B innerhalb des ursprünglichen A angibt.
Lösung mit C 11 Lambdas
C 11 Lambdas bieten eine praktische Möglichkeit, dieses Problem zu lösen Problem:
#include <iostream> #include <vector> #include <numeric> #include <algorithm> using namespace std; template <typename T> vector<size_t> sort_indexes(const vector<T> &v) { // Initialize original index locations vector<size_t> idx(v.size()); iota(idx.begin(), idx.end(), 0); // Sort indexes based on comparing values in v stable_sort(idx.begin(), idx.end(), [&v](size_t i1, size_t i2) {return v[i1] < v[i2];}); return idx; }
In dieser Implementierung erstellen wir zunächst eine Vektor-IDX mit den Originalindizes. Anschließend sortieren wir die Indizes mit „stable_sort“ und stellen so sicher, dass Elemente mit gleichen Werten ihre relative Reihenfolge beibehalten. Die resultierende Vektor-IDX enthält die sortierten Indizes.
Verwendung
Um diese Funktion zu verwenden, übergeben Sie einfach Ihren Wertevektor und iterieren Sie über die sortierten Indizes:
for (auto i: sort_indexes(v)) { cout << v[i] << endl; }
Anpassungen
Die Funktion sort_indexes kann an Ihre spezifischen Anforderungen angepasst werden. Sie können beispielsweise Ihren eigenen ursprünglichen Indexvektor bereitstellen, eine benutzerdefinierte Sortierfunktion oder einen Komparator bereitstellen oder v während der Sortierung mithilfe eines zusätzlichen Vektors neu anordnen.
Das obige ist der detaillierte Inhalt vonWie kann ich Daten in C unter Beibehaltung der Originalindizes sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!