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

Langage C++ Discussion :

Concaténer deux vectors de vector<vector<string>>


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut Concaténer deux vectors de vector<vector<string>>
    Bonjour,
    Voilà plusieurs semaines que je bloque sur le même problème. J'ai beau le tourner dans tous les sens, je ne trouve pas de solution ou d'algorithme adapté. Je vous expose mon problème en espérant être le plus claire possible :
    Je dispose le vector de vector suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<vector<string>> myVector;
    Ce vector, je le rempli à partir d'un fichier texte, voici un exemple de son remplissage :
    Vector 1 : 1 1 14 9 8
    Vector 2 : 1 2 6 3 9
    Vector 3 : 1 3 6 9 8
    Vector 4 : 1 1 6 3 2
    Vector 5 : 1 2 3 6 9

    Mon vector de vector est de la forme suivante donc : Vector 1 Vector 2 Vector 3 Vector 4 en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myVector.push_back(Vector 1);
    idem pour les autres

    Je souhaite comparer les deux premiers elements de chaque vectors. Par exemple, Vector 1 et Vector 4 ont les deux même premiers éléments, je souhaite donc remplir un nouveau vector de vector (ou une autre structure peu importe) avec :
    Vector 1 : 1 1 14 9 8 6 3 2 (j'ai concaténer Vector 1 et Vector 4 en supprimant les deux premiers éléments de Vector 4)
    Vector 2 : 1 2 6 3 9 3 6 9 (j'ai concatener Vector 2 et 5 d ela même manière)
    Vector 3 : 1 3 6 9 8

    Mon problème est a plus grande echelle bien sur avec des milliers de données.

    Pour l'instant, je dispose donc de mon vector de vector mais je ne vois pas comment le parcourir pour ne comparer que les deux premiers éléments. J'ai voulu partir comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for (int k=0; k <myVector.size(); k++)
    {	
    	for (int s=0 ; s<myVector[k].size(); s++)
    	{
                          for (int u=0; u <myVector.size(); u++)
    	        {
    		for (int a=0 ; a<myVector[u].size(); a++)
    		{
                                         // Comparaison de myVector[k][s] et myVector[u][a] ?????
                               }
                         }
                  } 
    }
    Je sais que je ne suis pas sur la bonne voie et que je complique le problème. Si quelqu'un peut m'expliquer mes erreurs et me donner une voie pour mon problème, ça serait super !
    J'ai fais beaucoup de recherche sur le net pour trouver des fonctions adaptées mais aucune ne convient...

    Je vous remercie d'avance pour vos réponses !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut.

    En fait c'est simple, tu compliques en effet le problème.

    Il suffit d'utiliser deux itérateurs si tu veux parcourir uniquement un nombre limité d'éléments :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::vector<std::vector<std::string>>::iterator it1;
    std::vector<std::string>::iterator it2;
    for (it1 = vecteur1.begin(); it1 != vecteur1.begin()+2; it1++) {
         for(it2 = vecteur.begin(); it2 != vecteur2.begin()+2; it2++) {
     
         }
    }

    Ceci va parcourir les 2 1er éléments du vecteur 1 et du vecteur 2.

    C'est ça que tu cherchais ?

    Et pour concaténer, tu peux utiliser la fonction insert :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::vector<std::string>::iterator it3;
    vecteur1.insert(it3->begin(), it1->begin(), it1->begin() + 2);
    vecteur2.insert(it3->begin(), it2->begin(), it2->begin() + 2);
    Ceci va concaténer les 2 1er élément du vecteur1 et du vecteur 2 en les ajoutant dans le vecteur 3. (A partir du début de vecteur 3)

    Ca m'étonne que tu n'aies pas trouvé sur internet.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Merci de ta réponse.
    Je n'ai pas très bien compris ton explication.
    Lorsque tu déclare les itérateurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<vector<std::string>>::iterator it1;
    vector<string>::iterator it2;
    Si je fais une boucle avec it1 de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (it1 = vecteur1.begin(); it1 != vecteur1.begin()+2; it1++) 
    {
    }
    Il me semble que (*it1) renvoi un vector et non un élément de mon vector. Or si je laisse le begin()+2 cela va me parcourir que les deux premiers vector de myVector non ? Or je veux tous les parcourir.
    Et comme je l'ai dit, j'ai des miliers de vector a comparer donc je cherche une méthode générique.

    Je te remercie encore de ta réponse. En fait, je cherche à comparer mes vector deux à deux de mon vector de vector myVector.

    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re, les éléments de ton premier vector sont des vectors donc oui forcément que le 1er itérateur va parcourir des vectors, tu ne peux pas faire autrement.

    Si tu veux parcourir tout les éléments de ton 1er vector tu remplace vecteur1.begin() + 2 par vecteur1.end().

    Je ne comprends pas très bien ou est ton problème.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Merci!
    Je ne suis pas très claire je suis désolée.
    En fait, si j'ai l'itérateur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<vector<string>>::iterator it1
    Et que je fais la boucle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (it1 = vecteur1.begin(); it1 != vecteur1.end(); it1++) 
    {
    }
    Est ce que tu es d'accord avec moi pour dire que (*it1) est un vector<string> ? Où est ce que je me plante la aussi ?
    Ensuite si je fais la boule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(it2 = (*it1).begin(); it2 != (*it1).begin()+2; it2++) 
    {
    }
    Donc (*it2) devrait me renvoyer à chaque itérations, un élément (jusqu'au 2ème) c'est bon ?
    Ensuite mon soucis, c'est que tu me propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (it1 = vecteur1.begin(); it1 != vecteur1.begin()+2; it1++) {
         for(it2 = vecteur2.begin(); it2 != vecteur2.begin()+2; it2++) {
     
         }
    }
    Mais que représente vecteur1 et vecteur2 dans ton code par rapport à mon cas ?
    est ce que vecteur1 est bien myVector ? Sinon peux-tu m'expliquer ce qu'il représente ?
    Sachant que myVector est composé de 1000 vecteurs, je ne me vois pas faire mille boucle.
    Je crois que je confond tes vecteur1 et 2, et les vecteur 1 et 2 de mon premier post.

    Je te remercie de ta patience.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re,
    oui tu dois confondre les vectors dans tes boucles à mon avis, it1 représente un ensemble de vector<string>. (Pas qu'un seul!)

    it1 contient juste une adresse mémoire pour chaque élément de vecteur1 et it2 l'adresse mémoire de chaque élément de ton deuxième vecteur.

    Tu peux donc facilement récupérer l'élément n°i du vecteur 1 et du vecteur deux en faisant vecteur1.begin() qui renvoie l'adresse mémoire du 1er élément de ton vecteur +i.
    vecteur1.end() correspond au dernière élément de ton 1er vecteur.

    Car les éléments d'un vecteur sont contigü. (c'est à dire qu'ils sont stocké l'un après l'autre en mémoire)

    Donc for (it1 = vecteur1.begin(); it1 != vecteur.end(); i++) va parcourir tout les éléments de ton 1er vecteur.

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(it2 = (*it1).begin(); it2 != (*it1).begin()+2; it2++) 
    {
    }

    Ce code, ne va pas compiler car it1 et it2 ne pointent pas sur un vecteur de même type.

    it1 pointe sur vector<vector<std::string>> et it2 sur vector<string>

    Mais que représente vecteur1 et vecteur2 dans ton code par rapport à mon cas ?
    est ce que vecteur1 est bien myVector ?
    vecteur1 représente à myVector en effet.

    Sachant que myVector est composé de 1000 vecteurs, je ne me vois pas faire mille boucle.
    Tu n'as pas besoin de faire 1000 boucles, une seule boucle suffit pour parcourir tes 1000 vecteur.

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (it1 = vecteur1.begin(); it1 != vecteur.end(); i++)

    Ceci va parcourir tes 1000 vecteur de type std::vector<string> de myVector.

    C'est comme un tableau à deux dimension en fait, ça marche exactement de la même manière.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse.
    Donc en effet, je suis d'accord pour la première boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (vector<vector<string>>::iterator it1 = myVector.begin(); it1 != myVector.end(); it1++) 
    {
    }
    (*it1) renvoi à chaque itération un vecteur de myVector ? C'est bien ça ?
    Mais myVector contient des vectors de la forme :
    1 1 2 5 6 3
    1 2 3 6 9 5
    1 3 6 9 8 5
    1 1 2 3 6 5
    1 2 3 6 9 5
    1 3 6 5 9 5
    1 1 3 5 6 9

    Et je souhaite :
    1 1 2 5 6 3 2 3 6 5 3 5 6 9
    1 2 3 6 9 5 3 6 9 5
    1 3 6 9 8 5 6 5 9 5

    donc, par exemple, le premier vector, le 4ème et le 7ème ont les mêmes deux premiers éléments.
    Je ne comprend pas ce que représente ton vecteur2 dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (vector<vector<string>>::iterator it1 = myVector.begin(); it1 != myVector.end(); it1++) 
    {
           for(vector<string>::iterator it2 = vecteur2.begin(); it2 != vecteur2.begin()+2; it2++)
           {
           }
    }
    Car la vecteur2 ne représente pas le premier vecteur de myVector, c'est pour ça que j'avais mis (*it1) à la place (et le code compile mais ne s'exécute pas ^^)
    Je ne vois toujours pas comparer deux à deux les mille vecteurs ...
    Si tu sais comment faire, pourrais-tu me mettre un exemple avec quelques vector pour que je comprenne ?

    Merci encore

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re,
    (*it1) renvoi à chaque itération un vecteur de myVector ? C'est bien ça ?
    Oui, c'est bien ça.

    Oui!

    Et it2 renvoie à chaque itération l'adresse mémoire des std::string contenu dans ton second vecteur.

    Tu peux comme ça parcourir tous les éléments contenu dans les vecteurs de myVector.

    Le code que j'ai mis ce dessus est identique à celui là :
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(unsigned int i = 0; i < myVector.size(); i++) {
        for (unsigned int j = 0; j < myVector[i].size(); j++) {
              std::string element = myVector[i][j];
        }
    }

    Si tu veux comparé 2 à 2 les milles vecteurs tu dois faire quelque chose comme ceci :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (unsigned int i = 0; i < myVector.size()-1; i++) {
         for (unsigned int j = i+1; j < myVector.size(); j++) {
               for (unsigned int k = 0; k < myVector[i].size(); k++) {
                    if (myVector[i][k] == myVector[j][k])
                         ....                
               }
         }
    }

    Ceci va comparer les éléments k du 1er vecteur avec les éléments k du second vecteur, puis les éléments k du 1er vecteur avec ceux du 3ème vecteurs, et ainsi de suite.

    C'est bien ça que tu voulais savoir ?

    Sinon je te conseille de regarder du côté des algorithmes de tri et de fusion ça pourra sûrement t'éclairer plus que moi.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup !
    Déjà, je comprends mieux
    Mais comment récupérer l'ensemble du vecteur parcouru pour que je puisse les concaténer ?
    Parce que la j'obtiens : myVector[i][k] et myVector[j][k] avec 0<=k<2 pour les deux premiers éléments (c'est bien ça ?)

    Comment récupérer les deux vecteurs courants pour pouvoir les concaténer ? (car la j'ai seulement les deux premiers éléments)
    J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (unsigned int i = 0; i < myVector.size()-1; i++) 
    {
    	for (unsigned int j = i+1; j < myVector.size(); j++) 
    	{
    		for (unsigned int k = 0; k < 2; k++) 
    		{
    			if (myVector[i][k] == myVector[j][k])
    			{
    				vector<string> firstElement= myVector[i][k];
    				vector<string> secondElement = myVector[j][k];
    			}
    		}
    	}
    }
    Merci encore pour ta patience et tes explications !

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    oups je me suis trompée.
    La déclaration de vector<string> firstElement et de vector<string> secondElement ne se fait pas comme ça.
    Mais si tu as une réponse à ma question précédent je veux bien

    Merci

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bon j'ai relu ton problème et je pense avoir une solution qui pourrait marcher :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (unsigned int i = 0; i < myVector.size()-1; i++) {
         for (unsigned int j = i+1; j < myVector.size(); j++) {
               for (unsigned int k = 0; k < myVector[i].size(); k++) {
                    if (myVector[i][k] != myVector[j][k])
                        newVector[i].push_back(myVector[i][k]);
               }
         }
    }

    Si je ne me trompe pas ceci va ajouter les élément k du vecteur i si il sont différents des élément k du vecteur j dans le nouveau vecteur i.

    Je pense que c'est quelque chose comme ça que tu voulais non ?

    PS : tout tes vecteurs ont t'il la même taille ?

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Merci !
    Comment déclare-tu newVector ?
    Comme ça : ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<string> newVector
    Car cela ne marche pas..
    Mais je sens que c'est pas loin !!!!!

    Non tous mes vectors n'ont pas la même taille.

    Merci

  13. #13
    Invité
    Invité(e)
    Par défaut
    Ha, si tout tes vector n'ont pas la même taille alors il faut que je change cela :
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (unsigned int i = 0; i < myVector.size()-1; i++) {
         for (unsigned int j = i+1; j < myVector.size(); j++) {
               for (unsigned int k = 0; k < myVector[i].size(); k++) {
                   for (unsigned int l = 0; l < myVector[j].size(); l++) {
                    if (myVector[i][k] != myVector[j][l])
                        newVector.push_back(myVector[i][k]);
               }
         }
    }

    Et tu peux en effet déclarer le nouveau vector comme ceci :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<std:string> newVector;

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    J'ai déclarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<string> newVector;
    J'ai fait le code que tu m'as dit, j'ai essayer d'afficher pour voir si c'est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int u=0; u <newVector.size(); u++)
    {	
               cout << newVector[u] << endl;
               getchar();
    }
    Et le programme plante... "Votre exécutable doit fermer", je pense que l'exception sur la trop grande quantité de donnée est levée.
    Pourtant j'ai bien fait :
    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
    for (unsigned int i = 0; i < myVector.size()-1; i++) 
    {
    	for (unsigned int j = i+1; j < myVector.size(); j++) 
    	{
    		for (unsigned int k = 0; k < myVector[i].size(); k++) 
                               {
     
    			for (unsigned int l = 0; l < myVector[j].size(); l++) 
    			{
    				if (myVector[i][k] == myVector[j][l])
    				{
    					newVector.push_back(myVector[i][k]);
    				}
    			}
                               }
    	}
    }
    C'est normal que je n'ai plus newVector[i] = ... à la dernière ligne ? pour que le vecteur se push_back bien au bon endroit ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Si ton vecteur est vide, il va le push_back à la fin du vecteur donc oui c'est normal le i c'était au cas ou tu aurait un vector de vector.

    Comme ceci :

    Code cpp : 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
     
    std::vector<std::vector<std::string>> newVector = std::vector<std::vector<std::string>>(1000);
    for (unsigned int i = 0; i < myVector.size()-1; i++) 
    {
    	for (unsigned int j = i+1; j < myVector.size(); j++) 
    	{
    		for (unsigned int k = 0; k < myVector[i].size(); k++) 
                               {
     
    			for (unsigned int l = 0; l < myVector[j].size(); l++) 
    			{
    				if (myVector[i][k] == myVector[j][l])
    				{
    					newVector[i].push_back(myVector[i][k]);
    				}
    			}
                   }
    	}
    }

    Tu as un débugueur ou quelque chose qui t'indique ou ça plante ?

    Je n'ai pas testé le code chez moi donc...

  16. #16
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Après test, ça ne fait pas du tout ce que je veux mais je te remercie de ton aide.
    Comme vu dans le premier post, j'étais partie sur un truc similaire avec 4 boucles mais je ne pense pas que ça soit la bonne solution.
    Avec ces 4 boucles, je ne compare pas seulement les deux premiers éléments et cela me pose problème.

    Si vous avez d'autres idées, je suis preneuse car je m'arrache les cheveux avec ce problème..

    Merci d'avance (et merci à toi de m'avoir aider et avoir pris du temps pour moi)

  17. #17
    Invité
    Invité(e)
    Par défaut
    Ok bah au moins j'aurai essayé.

    Je pense que je vais laissé la place à d'autre car je vois vraiment pas ce que tu veux. :/

  18. #18
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Le nombre 1000 est variables.

    Ca ne plante pas a la compilation mais a l'execution. J'ai le message "abort() called" que j'ai déjà rencontré et il me semble que cela vient d'une trop grande quantité de copie de données.

    Merci de m'avoir aidé, je vais essayé de partir sur une autre piste parce que ca devient trop complexe.

  19. #19
    Invité
    Invité(e)
    Par défaut
    En effet ça me semble être très complexe ce que tu essayes de faire, pourquoi tu ne regrouperais pas tout dans un seul et même vector et comparer chaque élément un a un pour voir si il n'est pas dans le vector plutôt que de les comparer 2 à 2 ?

    Sinon tu as aussi les std::map qui permettent de rechercher à l'aide d'une clé (par exemple un entier) si l'élément n'est pas déjà présent dans la map :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    auto iterator = std::map<int, std::string>::iterator it;
    it = myMap.find(0); (Recheche le 1er élément, si l'élement n'existe pas find renvoie myMap.end());
    if (it != myMap.end())
        //L'élement existe.

  20. #20
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Vu mon cas, je n'ai pas d'autres choix que de comparer les deux premiers éléments de chaque vectors deux à deux.
    Mon projet est très conséquent, je ne pourrais pas tout expliquer en détail mon projet cela prendrait trop de temps

    Mais je vais , en effet, m'orienter vers d'autre possibilitées, pourquoi pas les map !
    Mais les map ont des clefs uniques il me semble or moi je voudrais, du coup concaténer les valeurs de deux map qui ont la même clé !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Concaténer deux vectors et éliminer les doublons
    Par masoum dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 24/10/2012, 16h40
  2. [Vector] Utilisation d'un Vector
    Par LP-mpascolo dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 04/06/2007, 16h50
  3. Réponses: 3
    Dernier message: 04/12/2006, 13h01
  4. [Debutant][Vector]Petit problème de vector
    Par GyZmoO dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/05/2006, 10h39
  5. [Vector] Ajouter un Vector dans un autre Vector
    Par VinceFromBcn dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/06/2004, 21h54

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