Tri des vecteurs en fonction des valeurs d'un vecteur différent
Considérons un scénario dans lequel vous avez plusieurs vecteurs de la même longueur et que vous souhaitez trier un vecteur selon un ordre spécifié tout en appliquant la même permutation aux autres vecteurs. Cela pose le défi de savoir comment exploiter ce modèle de tri sur plusieurs vecteurs.
Solution
Pour trier un vecteur par valeurs d'un vecteur différent, vous pouvez utiliser un trieur et employez un vecteur qui associe l'index de chaque élément à sa valeur correspondante dans le vecteur de tri.
typedef vector<int>::const_iterator myiter; vector<pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (myiter it = Index.begin(); it != Index.end(); ++it, ++n) order[n] = make_pair(n, it); struct ordering { bool operator ()(pair<size_t, myiter> const& a, pair<size_t, myiter> const& b) { return *(a.second) < *(b.second); } }; sort(order.begin(), order.end(), ordering());
Une fois que vous avez l'ordre trié, vous pouvez l'utiliser comme table de recherche pour le nouvel index de chaque élément dans les autres vecteurs.
template <typename T> vector<T> sort_from_ref( vector<T> const& in, vector<pair<size_t, myiter>> const& reference ) { vector<T> ret(in.size()); size_t const size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
En appliquant ce processus, vous pouvez trier efficacement le vecteur cible et appliquer la même transformation aux éléments correspondants. dans les autres vecteurs.
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!