Heim >Backend-Entwicklung >C++ >Wie kann ich Daten in C unter Beibehaltung der Originalindizes sortieren?

Wie kann ich Daten in C unter Beibehaltung der Originalindizes sortieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 16:28:09510Durchsuche

How Can I Sort Data in C   While Maintaining Original Indices?

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> &amp;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(),
       [&amp;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!

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