OVH Cloud OVH Cloud

set et intersection

4 réponses
Avatar
May
Bonjour,

Je me trouve devant un probleme. Je souhaite utiliser set_intersection pour
obtenir l'intersection de 2 ensembles A et B.
pour cela il faut:
set_intersection(A.begin(),A.end(),B.begin(),B.end(),result.begin());//où
result est aussi un set

or je ne connais pas a priori la taille de result...
Quelle est la solution standard a ce probleme ?
Le stroustrup est tres vague la dessus ....
Je suis meme ouvert a la possibilité d'utiliser un autre type de container
pour result meme si je prefere un set.

Merci
May

--

4 réponses

Avatar
Gourgouilloult
May wrote:

set_intersection(A.begin(),A.end(),B.begin(),B.end(),result.begin());//où
result est aussi un set
or je ne connais pas a priori la taille de result...


Je ne connais pas encore, mais ce n'est pas à ça que servent les
back_inserter ?

Quelle est la solution standard a ce probleme ?
Le stroustrup est tres vague la dessus ....


§19.2.4
Sinon, c'est vrai qu'il aurait pu donner un exemple un peu plus
intéressant qu'avec des char[]...

Je suis meme ouvert a la possibilité d'utiliser un autre type de container
pour result meme si je prefere un set.


Je n'étudie pas la question très en profondeur, mais il est probable
qu'un back_inserter dans un set ne passe pas très bien, puisque le set
veut trier lui-même ses éléments. J'imagine qu'il y a une spécialisation
qui va bien...

Gourgou

Avatar
kanze
"May" wrote in message
news:<bm347s$7b9$...

Je me trouve devant un probleme. Je souhaite utiliser set_intersection
pour obtenir l'intersection de 2 ensembles A et B.
pour cela il faut:
set_intersection(A.begin(),A.end(),B.begin(),B.end(),result.begin());//où
result est aussi un set

or je ne connais pas a priori la taille de result...


Et même si tu le connaissais... Tu ne peux pas prédimensionnes un
std::set.

Quelle est la solution standard a ce probleme ?


A priori, un insert_iterator. Essaie
std::inserter( result, result.end() )
comme dernière paramètre.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
kanze
Gourgouilloult <gourgou_at_club-internet_point_fr> wrote in message
news:<3f8538ba$0$24672$...
May wrote:

set_intersection(A.begin(),A.end(),B.begin(),B.end(),result.begin());//où
result est aussi un set or je ne connais pas a priori la taille de
result...


Je ne connais pas encore, mais ce n'est pas à ça que servent les
back_inserter ?


back_inserter ne marche que si la collection a une fonction push_back.
Ce n'est pas le cas de set. En revanche, inserter, tout court, démande
une fonction insert qui prend un itérateur et une valeur. Ce qu'a
std::set.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
May
Je me trouve devant un probleme. Je souhaite utiliser set_intersection
pour obtenir l'intersection de 2 ensembles A et B.
pour cela il faut:

set_intersection(A.begin(),A.end(),B.begin(),B.end(),result.begin());//où


result est aussi un set

or je ne connais pas a priori la taille de result...


Et même si tu le connaissais... Tu ne peux pas prédimensionnes un
std::set.

Quelle est la solution standard a ce probleme ?


A priori, un insert_iterator. Essaie
std::inserter( result, result.end() )
comme dernière paramètre.



Merci

--