Je voudrais une méthode efficace pour faire inplace union d'un vecteur trié avec un autre vecteur trié. Par inplace, je veux dire que l'algorithme ne doit pas créer un nouveau vecteur ou un autre stockage pour stocker l'union, même temporairement. Au lieu de cela, le premier vecteur devrait croître simplement d'exactement le nombre de nouveaux éléments.Inplace union trié vecteurs
Quelque chose comme:
void inplace_union(vector & A, const vector & B);
Lorsque, par la suite, Un contient tous les éléments de A union Bet est triée.
std::set_union
dans <algorithm>
ne fonctionnera pas car il écrase sa destination, qui serait A.
Aussi, peut-il être fait avec juste un passage sur les deux vecteurs?
Edit: des éléments qui sont à la fois A et B ne doit apparaître qu'une fois dans A.
Une union des ensembles implique que l'ensemble de résultats n'a pas le même élément deux fois ... droit? Vous venez de publier l'algorithme de fusion qui est à la base du tri par fusion. – njamesp
Vous êtes la réponse est plus proche que je pensais. Si vous avez coché le même élément dans les deux (en le sautant), vous auriez fini ... sauf pour l'instant vous ne savez pas combien de temps il reste à faire. – njamesp
Le message original parlait d'une union de vecteurs . 'std :: unique' peut corriger cela après une fusion. Je continuerais toujours avec 'std :: inplace_merge' - il semble faire exactement ce que fait mon post, et combiné avec' std :: unique', exactement ce que vous voulez, moins tout le dur labeur. – Thanatos