Maison >développement back-end >C++ >Comment puis-je trier les données en C tout en conservant les index d'origine ?
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> &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(), [&v](size_t i1, size_t i2) {return v[i1] < v[i2];}); return idx; }
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; }
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!