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

Comment trier plusieurs vecteurs en fonction des valeurs d'un seul vecteur ?

Susan Sarandon
Libérer: 2024-12-29 20:04:14
original
681 Les gens l'ont consulté

How to Sort Multiple Vectors Based on the Values of a Single Vector?

Tri des vecteurs en fonction des valeurs d'un vecteur différent

Considérons un scénario dans lequel vous avez plusieurs vecteurs de la même longueur et que vous souhaitez trier un vecteur selon un ordre spécifié tout en appliquant la même permutation aux autres vecteurs. Cela pose le défi de savoir comment exploiter ce modèle de tri sur plusieurs vecteurs.

Solution

Pour trier un vecteur par valeurs d'un vecteur différent, vous pouvez utiliser un trieur et employez un vecteur qui associe l'index de chaque élément à sa valeur correspondante dans le vecteur de tri.

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);

struct ordering {
    bool operator ()(pair<size_t, myiter> const& a, pair<size_t, myiter> const& b) {
        return *(a.second) < *(b.second);
    }
};

sort(order.begin(), order.end(), ordering());
Copier après la connexion

Une fois que vous avez l'ordre trié, vous pouvez l'utiliser comme table de recherche pour le nouvel index de chaque élément dans les autres vecteurs.

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

En appliquant ce processus, vous pouvez trier efficacement le vecteur cible et appliquer la même transformation aux éléments correspondants. dans les autres vecteurs.

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