Sortieren mit Indexerhaltung in C
Im Bereich der Datenmanipulation ist das Sortieren ein grundlegender Vorgang, der Elemente in einer gewünschten Reihenfolge anordnet. Während Sortieralgorithmen von Natur aus die Reihenfolge gleicher Elemente beibehalten, kann es wünschenswert sein, die ursprünglichen Indizes der sortierten Elemente zu verfolgen, um ihren ursprünglichen Kontext beizubehalten.
Ein Ansatz für dieses Problem ist die Verwendung von Lambda-Funktionen in C 11. Ein Lambda ist eine anonyme Funktion, die Variablen aus ihrem umgebenden Bereich erfassen kann. Dies ermöglicht präzise und flexible Sortiervorgänge, die auf externe Daten zugreifen können.
Hier ist eine angepasste Funktion „sort_indexes“, die Lambdas mit dem Algorithmus „stable_sort“ der Standardbibliothek kombiniert:
#include <vector> #include <algorithm> using namespace std; template <typename T> vector<size_t> sort_indexes(const vector<T> &v) { // Initialize original indexes vector<size_t> idx(v.size()); iota(idx.begin(), idx.end(), 0); // Sort indexes based on values in v stable_sort(idx.begin(), idx.end(), [&](size_t i1, size_t i2) { return v[i1] < v[i2]; }); return idx; }
In dieser Funktion beginnen wir Initialisieren Sie einen Vektor idx mit den ursprünglichen Indizes des Eingabevektors v. Anschließend verwenden wir „stable_sort“, um die Indizes basierend auf einem Lambda-Komparator zu sortieren, der die Werte vergleicht in v. Die Verwendung von „stable_sort“ stellt sicher, dass Elemente mit gleichen Werten ihre ursprüngliche Reihenfolge innerhalb des sortierten Ergebnisses beibehalten.
Um diese Funktion zu verwenden, übergeben Sie einfach den Vektor der Elemente als Argument und es wird ein sortierter Vektor zurückgegeben Indizes. Bei einem gegebenen Vektor [5, 2, 1, 4, 3] wäre die zurückgegebene Vektor-IDx beispielsweise [1, 2, 4, 3, 0].
Mit dieser Technik können Sie Elemente während sortieren Beibehaltung ihrer ursprünglichen Indizes und Bereitstellung von Flexibilität bei nachfolgenden Datenverarbeitungsaufgaben.
Das obige ist der detaillierte Inhalt vonWie kann ich einen Vektor in C sortieren und dabei die Originalindizes beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!