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 deux std::unordered_set


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut la difference entre deux std::unordered_set
    Bonsoir,
    Je voulais savoir comment faire pour avoir la différence entre deux std::unordered_set ?

    c'est à dire si on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::unordered_set<edge_iter> v1,v2;
    a difference entre v1 et v2 seront les edge_iter qui se trouve dans v1 et qui ne se trouve pas dans v2.

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonsoir.

    La bibliothèque standard C++ propose exactement la fonction qu'il te faut : std::set_difference.

    Cette page t'explique le fonctionnement et montre un exemple qui devrait faire ton bonheur

    Cordialement.

  3. #3
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    C'est extraordinaire, c'est au moins le 3° topic que tu postes avec exactement le même "problème". Si on le sait pas que tu travailles sur des arbres et veux faire des "différences de collection".

    http://www.developpez.net/forums/d15...retes-graphes/
    http://www.developpez.net/forums/d15...re-std-vector/
    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.

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    voila ce que j'ai fais:
    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
    std::unordered_set<std::array<int, 3>>  edgesdiff(Graph const& g1,Graph const& g2){
     
        std::unordered_set<edge_iter> v1,v2,diff;
        std::unordered_set<std::array<int, 3>> res;
     
        edge_iter ei1, ei1_end;
        edge_iter ei2, ei2_end;
        for (tie(ei1, ei1_end) = edges(g1); ei1 != ei1_end; ++ei1){v1.insert(ei1);}
        for (tie(ei2, ei2_end) = edges(g1); ei2 != ei2_end; ++ei2){v2.insert(ei2);}
        std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::inserter(diff, diff.begin()));
     
     
     
        for(auto x:diff){
     
     
                std::array<int, 3> t;
                vertex_t from = source(*x, g1);
                t[0]=g1[from].id;
     
                vertex_t to = target(*x, g1);
                t[1]=g1[to].id;
     
                edge_t edg = edge(from, to, g1);
                t[2]=g1[edg.first].label;
     
                res.insert(t);
     
        }
     
    return res;
    }
    Mais ça me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hashtable_policy.h|85|error: no match for call to ‘(const std::hash<std::array<int, 3u> >) (const std::array<int, 3u>&)

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Et qu'en déduis-tu?

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Citation Envoyé par leternel Voir le message
    Et qu'en déduis-tu?
    Je pense qu'il faut déclarer une fonction de hachage


    J'ai essayé de faire une alternative:
    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
    std::unordered_set<std::array<int, 3>>  edgesdiff(Graph const& g1,Graph const& g2){
     
        std::unordered_set<edge_iter> v1,v2,diff;
        std::array<int, 3> t;
        std::unordered_set<std::array<int, 3>> res;
     
     
        for(auto x:edges(g1)){
     
                vertex_t from = source(*x, g1);
                t[0]=g1[from].id;
     
                vertex_t to = target(*x, g1);
                t[1]=g1[to].id;
     
                edge_t edg = edge(from, to, g1);
                t[2]=g1[edg.first].label;
     
            if(!edgeexist(g2,t[0],t[1],t[2])){res.insert(t);}
     
     
        }
     
    return res;
    }
    sachant que:
    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
    bool edgeexist(Graph const& g, int const& fromid, int const& toid, unsigned const& elabel) {
        int bn = 0;
     
            if (num_edges(g) != 0) {
                edge_pair ep;
                for (ep = edges(g); ep.first != ep.second; ++ep.first) // ep edge number
                {
                    vertex_t from = source(*ep.first, g);
                    vertex_t to = target(*ep.first, g);
                    edge_t edg = edge(from, to, g);
     
                    if ((g[from].id == fromid) && (g[to].id == toid) && (g[edg.first].label == elabel)) {
                        return true;
                    }
     
            }
        }
     
        return false;
    }
    mais ça me donne toujours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hashtable_policy.h|85|error: no match for call to ‘(const std::hash<std::array<int, 3u> >) (const std::array<int, 3u>&)’|

Discussions similaires

  1. la difference entre deux std::vector
    Par mohsenuss91 dans le forum C++
    Réponses: 23
    Dernier message: 01/04/2015, 12h32
  2. Réponses: 7
    Dernier message: 03/02/2006, 13h50
  3. [EXCEL] difference entre deux fichiers
    Par Mokhtar BEN MESSAOUD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/01/2006, 11h12
  4. [PIL] Difference entre deux images
    Par t_om84 dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 26/12/2005, 12h45
  5. difference entre deux requetes
    Par rdams dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/12/2005, 09h38

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