Maison > développement back-end > C++ > Comment trier efficacement plusieurs vecteurs simultanément en C tout en préservant la correspondance ?

Comment trier efficacement plusieurs vecteurs simultanément en C tout en préservant la correspondance ?

Susan Sarandon
Libérer: 2024-12-05 07:59:12
original
958 Les gens l'ont consulté

How to Efficiently Sort Multiple Vectors Simultaneously in C   While Preserving Correspondence?

Tri des conteneurs zippés (verrouillés) en C à l'aide de Boost ou du STL

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal