Maison > développement back-end > C++ > Comment puis-je trier les données en C tout en conservant les index d'origine ?

Comment puis-je trier les données en C tout en conservant les index d'origine ?

Barbara Streisand
Libérer: 2024-12-21 16:28:09
original
472 Les gens l'ont consulté

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

Tri des données tout en préservant les positions d'origine en C

En C , le besoin se fait souvent sentir de trier une collection d'éléments tout en préservant leurs positions d'origine . Ceci est crucial lorsque des facteurs externes dépendent de ces positions.

Considérez l'ensemble d'échantillons A = [5, 2, 1, 4, 3]. Trier cet ensemble à l'aide de la fonction de tri standard produirait B = [1,2,3,4,5]. Cependant, nous souhaitons également suivre les index d'origine des éléments triés, ce qui donne l'ensemble C = [2, 1, 4, 3, 0], qui indique l'index de chaque élément de B dans l'original A.

Solution utilisant les lambdas C 11

Les lambdas C 11 offrent un moyen pratique de résoudre ce problème problème :

#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;
}
Copier après la connexion

Dans cette implémentation, nous créons d'abord un vecteur idx avec les index d'origine. Nous trions ensuite les index à l'aide de stable_sort, en garantissant que les éléments de valeurs égales conservent leur ordre relatif. Le vecteur idx résultant contient les index triés.

Utilisation

Pour utiliser cette fonction, transmettez simplement votre vecteur de valeurs et parcourez les index triés :

for (auto i: sort_indexes(v)) {
  cout << v[i] << endl;
}
Copier après la connexion

Personnalisations

La fonction sort_indexes peut être personnalisé pour répondre à vos besoins spécifiques. Par exemple, vous pouvez fournir votre propre vecteur d'index original, fournir une fonction de tri ou un comparateur personnalisé, ou réorganiser v pendant le tri à l'aide d'un vecteur supplémentaire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal