Maison > développement back-end > C++ > Comment trier plusieurs vecteurs de manière cohérente en fonction d'un vecteur de référence ?

Comment trier plusieurs vecteurs de manière cohérente en fonction d'un vecteur de référence ?

Patricia Arquette
Libérer: 2024-12-14 15:50:11
original
474 Les gens l'ont consulté

How to Sort Multiple Vectors Consistently Based on a Reference Vector?

Tri des vecteurs en fonction des valeurs d'un autre vecteur

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

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

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

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!

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