Introduction
La tâche de trier simultanément plusieurs les vecteurs tout en maintenant leur correspondance inter-éléments est un défi courant en programmation. Cet article explore les solutions à ce problème en utilisant soit la bibliothèque Boost, soit la bibliothèque de modèles standard (STL).
Approche standard
L'approche standard consiste à extraire les valeurs du vecteurs dans une structure de données composite, telle qu'un tuple ou une structure. Cette approche nécessite cependant de copier les données, ce qui peut s'avérer inefficace.
Solution Boost
Boost fournit les fonctions boost::zip_iterator et boost::zip_range qui permettent création d'itérateurs qui parcourent plusieurs conteneurs en parallèle. Cependant, ces itérateurs sont en lecture seule et non à accès aléatoire, ce qui limite leur utilisation avec les algorithmes de tri standards.
Solution Range-v3
Une solution consiste à utiliser le bibliothèque range-v3. La fonction view::zip crée une vue qui parcourt plusieurs conteneurs en parallèle. Cette vue permet de trier à l'aide de la fonction ranges::sort.
#include <range/v3/all.hpp> #include <iostream> int main() { std::vector<int> v1 = {15, 7, 3, 5}; std::vector<int> v2 = {1, 2, 6, 21}; ranges::sort(ranges::view::zip(v1, v2), std::less<>{}, &std::pair<int, int>::first); std::cout << ranges::view::all(v1) << '\n'; std::cout << ranges::view::all(v2) << '\n'; return 0; }
Ce code montre comment trier deux vecteurs simultanément tout en conservant la correspondance des éléments. Le résultat trié est imprimé sur la console.
Considérations futures
Bien que cette approche fonctionne bien pour les séquences, son extension pour prendre en charge d'autres types de conteneurs, tels que les listes, nécessite itérateurs bidirectionnels et à accès aléatoire. Actuellement, la fonction std::sort de STL ne prend pas en charge les itérateurs bidirectionnels.
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!