Considérez un scénario dans lequel vous avez plusieurs vecteurs de la même longueur et devez trier l'un des vecteurs tout en conservant le même ordre de tri sur tous les autres vecteurs. Cela peut être utile lorsque les valeurs triées servent de références pour les éléments des autres vecteurs.
Dans l'extrait de code fourni, nous avons deux vecteurs : Index et Valeurs. L'index contient des entiers indiquant l'ordre de tri souhaité, et les valeurs contiennent des chaînes qui seront triées en conséquence.
Une approche consiste à créer un vecteur de paires qui combine les éléments de l'index et des valeurs, puis à trier ce vecteur à l'aide d'un comparateur personnalisé. Voici comment procéder :
using myiter = std::vector<int>::const_iterator; std::vector<std::pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (const auto& it : Index) { order[n++] = std::make_pair(n, it); } struct ordering { bool operator()(const std::pair<size_t, myiter>& a, const std::pair<size_t, myiter>& b) { return *a.second < *b.second; } }; std::sort(order.begin(), order.end(), ordering());
Le vecteur de commande contient désormais les éléments de l'index et des valeurs dans l'ordre trié. Vous pouvez également l'utiliser pour trier les autres vecteurs. Voici un modèle de fonction qui fait cela :
template <typename T> std::vector<T> sort_from_ref( const std::vector<T>& in, const std::vector<std::pair<size_t, myiter>>& reference ) { std::vector<T> ret(in.size()); size_t size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
En utilisant cette fonction, vous pouvez désormais obtenir la version triée des valeurs en fonction de l'ordre spécifié par Index :
std::vector<std::string> sortedValues = sort_from_ref(Values, order);
Cette approche permet vous permettant de trier efficacement plusieurs vecteurs de manière cohérente sans avoir besoin de solutions complexes et itératives.
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!