Tri d'un vecteur par valeurs d'un vecteur différent
Considérez le scénario dans lequel vous avez plusieurs vecteurs de longueur égale et visez à trier un vecteur basé sur les valeurs d’un vecteur différent. Par exemple, vous pouvez avoir un vecteur Index d'entiers et un vecteur Valeurs de chaînes. Le tri du vecteur Index devrait ensuite réorganiser les éléments du vecteur Values en conséquence.
Une approche efficace consiste à créer un vecteur qui associe les éléments du Index vecteur avec leurs indices correspondants. Ce vecteur, order, peut ensuite être trié à l'aide d'une fonction de tri personnalisée qui compare les éléments du vecteur Index. Le vecteur ordre trié capture l'ordre de tri souhaité.
En utilisant cet ordre de tri, vous pouvez réorganiser les autres vecteurs. Considérez l'extrait de code suivant :
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); sort(order.begin(), order.end(), ordering());
La fonction ordering trie le vecteur order en fonction des valeurs du vecteur Index. Vous pouvez ensuite utiliser le vecteur order pour réorganiser le vecteur Values en utilisant le code suivant :
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; }
Cette approche vous permet de trier un vecteur par les valeurs de un autre vecteur et appliquez le même tri aux vecteurs supplémentaires.
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!