IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

set_intersection et set_difference


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut set_intersection et set_difference
    Salut,

    j'ai un petit pb avec les algo de la STL

    si nous avons 2 ensembles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     int A1[] = {1, 3, 3, 5, 7, 9, 11};
     int A2[] = {1, 1, 2, 3, 5, 8, 13};
    le resultat de l'intersection est 1 3 5
    et celui de la difference est 3 7 9 11

    Dans mon cas je ne peux pas faire un unique car il y a d' autres informations sur mon objet que je ne souhait pas perdre.(l'exemple est la juste pour illustrer une clef)

    exist il une autre technique pour obtenir le resultat suivant?
    intersection:1 3 3 5
    diff:7 9 11

    merci d'avance

    sinon j' ai refait les 2 fonctions mais avant de les utiliser je voudrais avoir votre avis (changer les set_xxxx par set_myxxx )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    template <class InputIterator1, class InputIterator2, class OutputIterator>
    OutputIterator set_myintersection(InputIterator1 first1, InputIterator1 last1,  InputIterator2 first2, InputIterator2 last2, OutputIterator result)
    {
    	InputIterator1 it1=first1;
    	InputIterator2 it2=first2;
    	bool stable;
    	while((it1!=last1)&&(it2!=last2))
    	{
    		do
    		{
    			stable=true;
    			while((it1!=last1)&&(it2!=last2)&&((*it1)<(*it2))){++it1; stable=false;}
    			while((it1!=last1)&&(it2!=last2)&&((*it2)<(*it1))){++it2; stable=false;}
    		}while((it1!=last1)&&(it2!=last2)&&(stable==false));
    		while((it1!=last1)&&(it2!=last2)&&(!((*it2)<(*it1))))
    		{
    			*result=*it1;
    			++result;
    			++it1;
    		}
    	}
     return result;
    }
     
     
    template <class InputIterator1, class InputIterator2, class OutputIterator>
    OutputIterator set_mydifference(InputIterator1 first1, InputIterator1 last1,  InputIterator2 first2, InputIterator2 last2, OutputIterator result)
    {
    	InputIterator1 it1=first1;
    	InputIterator2 it2=first2;
     
    	while((it1!=last1)&&(it2!=last2))
    	{
    		while((it1!=last1)&&(it2!=last2)&&((*it2)<(*it1))){++it2;}
    		while((it1!=last1)&&(it2!=last2)&&((*it1)<(*it2)))
    		{
    			*result=*it1;
    			++result;
    			++it1;
    		}
    		while((it1!=last1)&&(it2!=last2)&&(!((*it2)<(*it1)))){	++it1;	}
    	}
     return result;
    }
     
    int main(int argc, char **argv)
    {
      int A1[] = {1, 3, 3, 5, 7, 9, 11};
      int A2[] = {1, 1, 2, 3, 5, 8, 13};
     
      const int N1 = sizeof(A1) / sizeof(int);
      const int N2 = sizeof(A2) / sizeof(int);
     
    	cout << "Intersection of A1 and A2: ";
    	set_intersection(A1, A1 + N1, A2, A2 + N2, ostream_iterator<int>(cout, " "));
    	cout << endl;
    	cout << "Difference of A1 and A2: ";
    	set_difference(A1, A1 + N1, A2, A2 + N2,ostream_iterator<int>(cout, " "));
    	cout << endl;
            return 0;
    }

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Le résultat est conforme au niveau ensembliste, donc si tu veux un résultat différent, il faudra recoder toi-même les fonctions

Discussions similaires

  1. std::set_difference crash !
    Par N0vember dans le forum Débuter
    Réponses: 2
    Dernier message: 16/03/2010, 16h43
  2. Debug Assertion Failed sur set_intersection
    Par Zéli dans le forum SL & STL
    Réponses: 8
    Dernier message: 04/12/2009, 04h32
  3. Réponses: 2
    Dernier message: 03/11/2009, 14h15
  4. souci fonction set_intersection
    Par loicounet dans le forum C++
    Réponses: 5
    Dernier message: 11/04/2009, 00h22
  5. question sur set_intersection
    Par tnarol dans le forum SL & STL
    Réponses: 16
    Dernier message: 21/08/2007, 20h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo