Maison >développement back-end >C++ >Comment puis-je conserver les index originaux lors du tri des données en C ?

Comment puis-je conserver les index originaux lors du tri des données en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-30 18:37:09406parcourir

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

Préserver les index d'origine pendant le tri C

Le tri des données tout en conservant les index d'origine est une exigence courante dans les tâches de manipulation de données. En C , en utilisant la bibliothèque standard, cette tâche comprend les étapes suivantes :

  1. Initialisation du vecteur : Créer des vecteurs pour stocker les valeurs des données d'origine et leurs index correspondants, initialisés avec le valeurs.
  2. Tri avec préservation de l'index : Utiliser des algorithmes standard comme std::stable_sort pour organiser les données par valeurs tout en conservant la corrélation entre les index vectoriels d'origine et triés.
  3. Renvoi des index triés : Extraire et renvoyer un vecteur contenant les index triés, qui préserve l'ordre de l'original éléments.
  4. Exemple d'application : Utilisez les index triés dans les itérations suivantes pour récupérer les données du vecteur d'origine dans le ordre modifié.

Implémentation en 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;
}

Exemple d'utilisation :

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;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn