Heim > Backend-Entwicklung > C++ > Wie kann ich einen Vektor in C sortieren und dabei die Originalindizes beibehalten?

Wie kann ich einen Vektor in C sortieren und dabei die Originalindizes beibehalten?

DDD
Freigeben: 2024-12-25 02:50:13
Original
294 Leute haben es durchsucht

How Can I Sort a Vector in C   While Preserving Original Indices?

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage