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 :

merge de multimaps ?


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut merge de multimaps ?
    Bonjour,

    Je dois fusionner deux multimaps.
    Je sais le faire avec insert (complexité en temps dans O(N.Log(N)).
    Je voudrais le faire avec merge (complexité en temps dans O(N)).

    J'ai essayé ça, mais ça ne compile pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef std::multimap<int, std::pair<int, int>> Map ; // ma structure de multimap
    Map final_m ;
    Map m1 = my_algo(b1) ; // retourne une des maps à fusionner
    Map m2 = my_algo(b2) ; // retourne l'autre map à fusionner
     
    // erreur ici : final_m.begin() n'est pas le bon itérateur.
    merge (m1.begin(), m1.end(), m2.begin(), m2.end(), final_m.begin()) ;
    Merci de votre aide, Olivier
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    merge (m1.begin(), m1.end(), m2.begin(), m2.end(), std::back_inserter(final_m)) ;

  3. #3
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cob59 Voir le message
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    merge (m1.begin(), m1.end(), m2.begin(), m2.end(), std::back_inserter(final_m)) ;
    Presque...

    J'ai eu une réponse sur stackoverflow. C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inserter(final_m,end(final_m))
    Voici un code de démo qui emploie cette solution :
    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
    #include <iostream>
    #include <map>
    #include <iterator>
    #include <algorithm>
     
    typedef std::pair<int, int> Cell ;
    typedef std::multimap<int, Cell> Border_map ;
     
    void test_merge_maps_1()
    {
    Border_map a, b, c ;
    std::cout << std::endl << "a" << std::endl ;
    for (int i=1; i<10; i+=2)
    {
        a.insert(std::pair<int, Cell>(i, Cell(i,i))) ;
        std::cout << i << " " ;
    }
     
    std::cout << std::endl << "b" << std::endl ;
    for (int i=2; i<11; i+=2)
    {
        b.insert(std::pair<int, Cell>(i, Cell(i,i))) ;
        std::cout << i << " " ;
    }
     
    std::cout << std::endl << "merge" << std::endl ;
    std::merge(a.begin(), a.end(), b.begin(), b.end(), inserter(c,end(c))) ;
     
    std::cout << "result" << std::endl ;
    for(auto x: c)
        std::cout << x.first << " " ;
    std::cout << std::endl ;
    }
     
    int main(void)
    {
        test_merge_maps_1() ;
        return 0 ;
    }
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. merge replication : synchronisation
    Par nys_00 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/03/2005, 08h50
  2. multimap initialisation
    Par moldavi dans le forum C++
    Réponses: 2
    Dernier message: 14/03/2005, 17h04
  3. mais que fait upper_range() dans un multimap?
    Par porcher dans le forum C++
    Réponses: 7
    Dernier message: 18/02/2005, 22h21
  4. Merge fichier
    Par OuBiEn dans le forum Linux
    Réponses: 2
    Dernier message: 17/02/2005, 15h44
  5. Shell - Merge de fichiers
    Par tesla dans le forum Linux
    Réponses: 4
    Dernier message: 29/06/2004, 02h10

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