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

C++ Discussion :

la difference entre 2 vector remplie par des string


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut la difference entre 2 vector remplie par des string
    bonjour a tous;

    en fait je suis débutant en c++.et j'ai trouvé un exercice qui a vraiment cassé ma tete .
    je veux faire la difference entre deux vector par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<string> mots1 = {"il", "a", "la", "belle", "vie"};
    vector<string> mots2 = {"la", "vie", "c'est", "la", "vie"};
    le resultat sera d'afficher le mots1 sans les elements qu'on trouvé en mots 2 c'est a dire le resultat sera comme suit:

    Ensemble 1: vie belle la a il
    Ensemble 2: c'est vie la
    Ensemble 1 apres la difference: belle a il

    merci pour vos idées et votre aide.

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Il suffit de parcourir le deuxième vecteur. Pour chaque mot (du deuxième vecteur), on cherche ce mot dans le premier vecteur avec std::find (retourne un itérateur sur le premier élément trouvé, ou ton_vecteur.end() si pas trouvé) puis on le supprime avec la méthode .erase(un_itérateur) de std::vector si besoin.

  3. #3
    Membre confirmé
    Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Octobre 2013
    Messages : 158
    Points : 555
    Points
    555
    Par défaut
    C'est quoi le but de l'exo ?
    Te faire ecrire une fonction de base (La difference entre deux ensembles d'elements)
    ou bien te faire utiliser la librairie standard de C++ ?
    Dans le second cas, la reponse est par la
    http://www.cplusplus.com/reference/a...et_difference/

    Evidemment dans le cadre d'un exo c'est interessant de le faire a la main et pas avec les fonctions toutes faites

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    étrangement, les mathématiques n'ont pas de définition correcte de différence.

    Un vecteur peut contenir des doublons.
    Quelle est la différence de {3, 2, 3, 1, 2, 3} et {3, 2}?

    Un vecteur n'est pas trié.
    Quelle est la différence de {1, 2, 3} et {3, 2}?

    Avec des sets, c'est complètement défini.
    Au point qu'il existe la fonction std::set_difference dans <algorithm>Cela dit, selon ce que tu veux, c'est peut-être utilisable.
    regarde dans la documentation

    zut, doublé
    Remarques, les deux références (cppreference.com et cplusplus.com) disent la même chose, mais il peut y avoir des explications de certains détails
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Bonjour

    Il suffit de parcourir le deuxième vecteur. Pour chaque mot (du deuxième vecteur), on cherche ce mot dans le premier vecteur avec std::find (retourne un itérateur sur le premier élément trouvé, ou ton_vecteur.end() si pas trouvé) puis on le supprime avec la méthode .erase(un_itérateur) de std::vector si besoin.
    emm désolé j'ai oublié de dire que la fonction ne devrait faire qu'un seul parcours dans les 2 tableaux + pour supprimer il faut faire le décalage il faut pas utiliser " erase ".

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par _zzyx_ Voir le message
    C'est quoi le but de l'exo ?
    Te faire ecrire une fonction de base (La difference entre deux ensembles d'elements)
    ou bien te faire utiliser la librairie standard de C++ ?
    Dans le second cas, la reponse est par la
    http://www.cplusplus.com/reference/a...et_difference/

    Evidemment dans le cadre d'un exo c'est interessant de le faire a la main et pas avec les fonctions toutes faites
    merci pour votre réponse oui je voudrais écrire une fonction de base il faut pas utilisé les fonction de librairie de c++ .pour supprimer il faut faire le décalage et pas la fonction erase.
    merci

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par leternel Voir le message
    étrangement, les mathématiques n'ont pas de définition correcte de différence.

    Un vecteur peut contenir des doublons.
    Quelle est la différence de {3, 2, 3, 1, 2, 3} et {3, 2}?

    Un vecteur n'est pas trié.
    Quelle est la différence de {1, 2, 3} et {3, 2}?

    Avec des sets, c'est complètement défini.
    Au point qu'il existe la fonction std::set_difference dans <algorithm>Cela dit, selon ce que tu veux, c'est peut-être utilisable.
    regarde dans la documentation

    zut, doublé
    Remarques, les deux références (cppreference.com et cplusplus.com) disent la même chose, mais il peut y avoir des explications de certains détails


    je m'excuse peut être j'ai mal expliqué .un autre exemple peut etre c bien
    j'ai 2 tableau v1 { "a","b","c","d","e","k"}
    v2{"b","c","d","e"}

    je voudrais avoir dans le résultat: v1{"a","k" } c est a dire garder les char qui existe en v1 et qui n'existe pas en v2.
    j'espere que mon explication sera claire.

    (je m'excuse pour mon français )

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Le problème au tableau (et vector), c'est qu'il peut contenir plusieurs fois des valeurs.

    Est-ce que dans ton contexte, tu es dans le cadre de l'ensemble? (au sens mathématique: valeurs toutes différentes)

    Autre chose. En l'absence de données triées, tu ne peux pas t'en sortir en seulement 2 parcours.

    Par contre, en utilisant un std::set, tu auras mécaniquement trié tes données à l'insertion, et la construction de la différence sera (relativement) rapide.
    Il ne restera qu'a faire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <algorithm>
    #include <set>
    #include <iterator>
    int main() {
        std::set<int> s1 {1, 2, 5, 5, 5, 9};
        std::set<int> s2 {2, 5, 7};
        std::set<int> diff;
        //ne fonctionne que parce que s1 et s2 sont triés
        std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), std::inserter(diff, diff.begin()));
    }
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si t n'espères faire qu'un passage, alors il faut que les valeurs soient triées.

    Est-ce un exercice farfelue ou une idée farfelue que de faire ceci ?
    Dans tous les cas, taper sur les doigts de celui qui y a pensé semble opportun.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. WCF Data Service : remplir une liste par des String
    Par safisafi dans le forum Silverlight
    Réponses: 7
    Dernier message: 22/07/2011, 18h58
  2. Réponses: 1
    Dernier message: 02/04/2010, 08h19
  3. [PHP 5.3] Problème empty() rempli par des warnings
    Par L0007 dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2009, 10h41
  4. [MySQL] Alimenter un tableau par des string séparés par point virgule
    Par Zikas-r dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/04/2009, 11h19
  5. Difference entre ftp par ssl et ssh
    Par franck06 dans le forum Développement
    Réponses: 3
    Dernier message: 06/12/2004, 20h29

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