Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
508 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Recherche d'éléments communs dans deux vector

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recherche d'éléments communs dans deux vector

n°237411
polyacetal
I was here
Posté le 30-10-2002 à 16:52:13  profilanswer
 

Salut à tous,
voila, j'ai deux vector<int> et j'ai besion d'en construire un troisième qui contient l'intersection de ces deux vector....
voici donc mon code:
 

Code :
  1. vector<int> intersection;
  2. intersection.push_back(0);
  3. insert_iterator< vector<int> > it(intersection,intersection.begin());
  4. set_intersection(numeros1.begin(),numeros1.end(),numeros2.begin(),numeros2.end(),it);
  5. copy(intersection.begin(),intersection.end(),it);
  6. for(int i=0;i<intersection.size();i++)
  7.     if(intersection[i] != 0)
  8.         grp->add(intersection[i]);


 
je crée donc mon vector résultat et je met qch dedans (sinon ca plante) ensiote je doit ajouter les valeurs une par une avec une méthode (add(int)) dans grp (un objet d'une classe perso.) Le problème est que dans "intersection" (le vector resultat) j'ai plusieur fois les memes numéros:
par ex:
numeros1 -> 123456
numeros2 -> 456789
intersection -> 44456   :ouch:  
est-ce que quelqu'un voit une erreur dans mon code ou a connu le même problème...
Merci

mood
Publicité
Posté le 30-10-2002 à 16:52:13  profilanswer
 

n°237424
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 30-10-2002 à 17:03:36  profilanswer
 

il faut que les sequences soit triées avant tout => std::sort
 
 
et aulieu de faire ca
 

Code :
  1. intersection.push_back(0);
  2. insert_iterator< vector<int> > it(intersection,intersection.begin());


 
utilises plutot un back_inserter, c'est plus élégant
 
http://www.sgi.com/tech/stl/back_insert_iterator.html
 

Code :
  1. template<class BackInsertionSequence> back_insert_iterator<BackInsertionSequence>
  2. back_inserter(BackInsertionSequence& S)


 


---------------
du bon usage de rand [C] / [C++]
n°237444
polyacetal
I was here
Posté le 30-10-2002 à 17:17:41  profilanswer
 

Merci Taz@PPC  :hello: , ca marche...
je suis pas encore très au point sur out ce qui touche aux itérateurs...

n°237450
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 30-10-2002 à 17:20:15  profilanswer
 

polyacetal a écrit a écrit :

Merci Taz@PPC  :hello: , ca marche...
je suis pas encore très au point sur out ce qui touche aux itérateurs...




 
raison de plus pour chercher les solutions simples  :hello:
 
ca marche back_inserter?
 
y a aussi front_inserter mais ce n'est pas adapté pour un vector.
 
tu peux aussi simplement utilisé les std::set


---------------
du bon usage de rand [C] / [C++]
n°237455
polyacetal
I was here
Posté le 30-10-2002 à 17:24:31  profilanswer
 

Bah oui ca marche, en gros j'ai juste rajouté back_ devant insert_iterator et plus de problème...

n°237459
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 30-10-2002 à 17:27:22  profilanswer
 

:non: meme pas besoin
 
back_inserter est une fonction qui renvoie un back_inserter_iterator
 
 

Code :
  1. fonction(...., back_inserter(conteneur));


 


---------------
du bon usage de rand [C] / [C++]
n°237610
Ace17
Posté le 30-10-2002 à 22:53:15  profilanswer
 

Qu'est-ce que c'est l'intersection de deux vecteurs?

n°237612
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 30-10-2002 à 23:05:43  profilanswer
 

les éléments en communs


---------------
du bon usage de rand [C] / [C++]
n°237698
LeGreg
Posté le 31-10-2002 à 05:06:30  profilanswer
 

theorie des ensembles:
definition des operations binaires,  
union, intersection
 
union = tous les elements presents dans un ou l'autre ensemble
intersection = tous les elements presents dans l'un et dans l'autre ensemble.
 
Apres tu as la difference, qui est l'ensemble des elements presents dans l'un mais pas dans l'autre etc.. (c'est l'union prive de l'intersection).
 
En primaire on faisait faire ca aux gosses, on devait dessiner des patates avec des croix a l'interieur. je ne sais pas si ca se fait encore..
 
LeGreg
 

n°237720
Ace17
Posté le 31-10-2002 à 09:05:00  profilanswer
 

Ouais ca je sais, mais quand on parle d'ensembles; J'ai jamais intersecté des vecteurs; A moins que vous ne vouliez parler des composantes qui ont les memes valeurs?
 
A = {1, 2, 3, 4}
B = {3, 4, 0, 4}
 
A inter B donne quoi? {0, 0, 0, 4} ou {3, 4} ?

mood
Publicité
Posté le 31-10-2002 à 09:05:00  profilanswer
 

n°237782
kenshiro18​2
Posté le 31-10-2002 à 10:35:15  profilanswer
 

Si tu as la possibiliter de trier tes deux vector (avec std::sort), tu dois pouvoir utiliser "set_intersection".
 
Sinon tu peux utiliser un "set" en sortie (ensemble d'elements distincts).

n°237783
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 31-10-2002 à 10:35:45  profilanswer
 

{3, 4}


---------------
du bon usage de rand [C] / [C++]
n°237790
kenshiro18​2
Posté le 31-10-2002 à 10:43:33  profilanswer
 

Un exemple
 

Code :
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4. #include <iterator>
  5. int main(int argc, char *argv[])
  6. {
  7.     int array1[] = {1, 2, 3, 4};
  8.     int array2[] = {3, 4, 0, 4, 1};
  9.     size_t LEN1 = sizeof(array1)/sizeof(array1[0]);
  10.     size_t LEN2 = sizeof(array2)/sizeof(array2[0]);
  11.     std::sort(array1, array1+LEN1);
  12.     std::sort(array2, array2+LEN2);
  13.    
  14.     typedef std::vector<int> TotoT;
  15.     TotoT toto;
  16.     std::set_intersection(array1, array1+LEN1, array2, array2+LEN2,
  17.         std::back_inserter<TotoT>(toto));
  18.    
  19.     std::copy(toto.begin(), toto.end(), std::ostream_iterator<int>(std::cout, " " ));
  20.     std::cout << std::endl;
  21.    
  22.     return 0;
  23. }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Recherche d'éléments communs dans deux vector

 

Sujets relatifs
Recherche livre Algo / C++Comment faire une recherche dans une date ?
Recherche codeur PHP pour le site d'une grande team RtCW (wolfenstein)MOTEUR DE RECHERCHE ULTRA PUISSANT !!!
Comment faire clignoter des éléments graphiques ?Recherche CD2 Visual Studio 6 contenat le MSDN pour VB6........
recherche topic avec morceau de c++ ultra objet / test d'embaucheMoteur de recherche ET/OU détection Flash (deux questions d'un coup)
[PHP]Problème avec fonction de rechercheinséré une barre de recherche
Plus de sujets relatifs à : Recherche d'éléments communs dans deux vector


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR