Maison > développement back-end > C++ > Comment trier plusieurs vecteurs simultanément en fonction d'un vecteur de référence ?

Comment trier plusieurs vecteurs simultanément en fonction d'un vecteur de référence ?

Patricia Arquette
Libérer: 2025-01-03 18:16:43
original
272 Les gens l'ont consulté

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

Tri des vecteurs en fonction d'un vecteur de référence externe

Dans les situations où plusieurs vecteurs de longueur égale sont présents, le tri d'un vecteur nécessite une solution qui transforme simultanément tous les autres vecteurs en conséquence.

Considérez ce qui suit scénario :

std::vector<int> Index = { 3, 1, 2 };
std::vector<std::string> Values = { "Third", "First", "Second" };
Copier après la connexion

Transformation : L'index est trié.

Résultat attendu : Les valeurs doivent également être triées.

Une approche consiste à créer un vecteur contenant à la fois l'index d'origine et les éléments du tri-dictateur vecteur :

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

Ensuite, ce vecteur est trié :

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

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

L'ordre de tri permet le réarrangement d'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

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