Maison >développement back-end >C++ >Comment trier un vecteur en fonction des valeurs d'un autre vecteur ?

Comment trier un vecteur en fonction des valeurs d'un autre vecteur ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-29 04:14:12807parcourir

How to Sort One Vector Based on the Values of Another Vector?

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!

Déclaration:
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