Heim > Backend-Entwicklung > C++ > Wie kann ich Originalindizes beim Sortieren von Daten in C beibehalten?

Wie kann ich Originalindizes beim Sortieren von Daten in C beibehalten?

Patricia Arquette
Freigeben: 2024-12-30 18:37:09
Original
403 Leute haben es durchsucht

How Can I Preserve Original Indexes When Sorting Data in C  ?

Beibehalten der Originalindizes während der C-Sortierung

Das Sortieren von Daten unter Beibehaltung der Originalindizes ist eine häufige Anforderung bei Datenbearbeitungsaufgaben. In C umfasst diese Aufgabe unter Verwendung der Standardbibliothek die folgenden Schritte:

  1. Vektorinitialisierung: Erstellen Sie Vektoren, um die ursprünglichen Datenwerte und ihre entsprechenden Indizes zu speichern, initialisiert mit den entsprechenden Werte.
  2. Sortieren mit Indexerhaltung: Nutzen Sie Standardalgorithmen wie std::stable_sort um Daten nach Werten anzuordnen und dabei die Korrelation zwischen den ursprünglichen und den sortierten Vektorindizes beizubehalten.
  3. Sortierte Indizes zurückgeben: Extrahieren Sie einen Vektor mit den sortierten Indizes und geben Sie ihn zurück, wodurch die Reihenfolge des Originals erhalten bleibt Elemente.
  4. Beispielanwendung: Verwenden Sie die sortierten Indizes in nachfolgenden Iterationen, um Daten aus dem ursprünglichen Vektor im abzurufen geänderte Reihenfolge.

Implementierung in C 11:

#include <iostream>
#include <vector>
#include <numeric>      // std::iota
#include <algorithm>    // std::sort, std::stable_sort

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
  // Using std::stable_sort instead of std::sort
  // to avoid unnecessary index re-orderings
  // when v contains elements of equal values 
  stable_sort(idx.begin(), idx.end(),
       [&v](size_t i1, size_t i2) {return v[i1] < v[i2];});

  return idx;
}
Nach dem Login kopieren

Beispielverwendung:

vector<double> values = {5, 2, 1, 4, 3};
vector<size_t> sorted_indexes = sort_indexes(values);

for (auto i : sorted_indexes) {
  cout << values[i] << endl;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Originalindizes beim Sortieren von Daten in C 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage