Maison > développement back-end > C++ > Comment trier un « std :: vector » en fonction de l'ordre d'un autre ?

Comment trier un « std :: vector » en fonction de l'ordre d'un autre ?

DDD
Libérer: 2024-12-07 12:16:13
original
735 Les gens l'ont consulté

How to Sort One `std::vector` Based on the Order of Another?

Tri d'un std::vecteur par valeurs d'un std::vecteur différent

Ce problème implique d'aligner l'ordre d'un vecteur avec le ordre d’un autre vecteur. Par exemple, le vecteur Index contient des nombres [3, 1, 2] et le vecteur Valeurs contient des chaînes « Troisième, Premier, Deuxième ». Le tri de l'index par ordre croissant ([1, 2, 3]) devrait entraîner le tri des valeurs dans l'ordre correspondant (["Premier", "Deuxième", "Troisième"]).

Solution :

Une approche courante consiste à créer un ordre vectoriel en combinant les indices de l'index et leurs éléments correspondants des valeurs. Ce vecteur peut ensuite être trié à l'aide d'un comparateur personnalisé qui compare les éléments de l'index :

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

Le vecteur d'ordre résultant contient désormais les indices triés. Pour appliquer cet ordre aux valeurs, la fonction suivante peut être utilisée :

template <typename T>
vector<T> sort_from_ref(
    vector<T> const&amp; in,
    vector<pair<size_t, myiter>> const&amp; 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;
}

Values = sort_from_ref(Values, order);
Copier après la connexion

Cette fonction prend le vecteur d'origine in et le vecteur de référence contenant les indices triés et renvoie une copie de in triée en conséquence.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal