Map = Array + Struktur



  • Willkommen im Forum. Neben dem Tip von Belli noch ein Hinweis: Nutze bitte die Code-Tags, damit man deinen Code leichter lesen kann. Lies dir gerne auch die mit wichtig gekennzeichneten Threads im Forum durch, um weitere gern begangene Einsteigerfehler zu vermeiden und schnellere und bessere Antworten zu bekommen.



  • Ich verstehe das Problem nicht. Wozu ist a gut? Was bedeutet Artikel(e,5)? Wo kommt was wann raus und was willst Du stattdessen haben? Wie sieht der Code (oder ein kompilierbares Minimalbeispiel!) wirklich aus? Was willst Du eigentlich machen?



  • Ich dachte, in einer multimap können Values mehrmals vorkommen. Huh?



  • danke für die schnellen antorten 🙂
    ich werde die multimap direkt ausprobieren.



  • 314159265358979 schrieb:

    Ich dachte, in einer multimap können Values mehrmals vorkommen. Huh?

    Ja. Und? Es können sogar keys mehrfach vorkommen, im Gegensatz zur map. Er benutzt hier ne map.



  • so ich habe mein programm jetzt auf multimap umgeschrieben.
    jetzt will ich mir zb die folgenden 3 einträge ausgeben lassen :

    MultiMap:
    Array -> Struktur
    [0]=1 -> a,1
    [1]=1 -> a,2
    [2]=1 -> a,3

    mein versuch:

    for(int h =0 ; h <= 3 ; h++)	{									
    cout<<multimap.find(A[h])->second.artikel << " , " << 
    <<multimap.find(A[h])->second.preis 
    << endl;				
    }
    

    meine ausgabe sieht aber wie folgt aus :

    a , 1
    a , 1
    a , 1

    wie kann ich mir jetzt die verschiedenen werte ausgeben lassen??



  • Die Ausgabe sieht schon richtig aus. Nur wie du jetzt deine Eingabe in die multimap gestaltet hast, zeigst du uns ja nicht. Und auf wildes raten habe ich grade wenig Lust...



  • for(int i = 1 ; i <= 4 ; i++)
    {
    a.artikel = "a";
    a.preis = i;
    A[i] = 1
    multimap.insert(pair<unsigned int,Artikel>(A[i], a));
    }
    


  • 314159265358979 schrieb:

    Ich dachte, in einer multimap können Values mehrmals vorkommen. Huh?

    werte können auch in einer map beliebig oft vorkommen, aber schlüssel halt nur einmal.

    und in de rmultimap kann beides beliebig vorkommen...



  • janmerkschien schrieb:

    for(int h =0 ; h <= 3 ; h++)	{									
    cout<<multimap.find(A[h])->second.artikel << " , " << 
    <<multimap.find(A[h])->second.preis 
    << endl;				
    }
    
    typedef multimap<unsigned,Artikel> iter;
    // Alle Einträge für Key==1 ausgeben
    pair<iter,iter> Range = mm.equal_range( 1 );
    for ( ; Range.first!=Range.second; ++Range.first )
        cout << Range.first << " " << Range.second << "\n";
    


  • Bei einer multimap bietet sich doch equal_range an.

    void print(const multimap<int,Artikel>& m, int key)
    {
      typedef multimap<int,Artikel>::const_iterator I;
      pair<I,I> p = m.equal_range(key);
      for(I i=p.first;i!=p.second();++i)
      {
        // Ausgabe
      }
    }
    

    Natürlich ungetestet.

    Die Lösung kam ja schon, sehe ich gerade, naja, das Auslagern in eine Funktion erscheint mir dennoch nützlich.



  • janmerkschien schrieb:

    [bla]

    Siehe http://www.c-plusplus.net/forum/200753
    Beachte besonders den vorletzten Punkt.



  • ich habe mich jetzt etwas eingearbeitet aber ich bekomme es einfach nicht hin ...
    er gibt mir immer nur den ersten Wert aus, also "1"

    typedef multimap<unsigned int,Artikel>::const_iterator IT;	
    pair<IT,IT> p = mm.equal_range(A[0]);
    for(;p.first != p.second; ++p.first)
    	 {
    		 filetxt << (p.second)->second.preis <<endl;
    	  }
    


  • Skym0sh0 schrieb:

    314159265358979 schrieb:

    Ich dachte, in einer multimap können Values mehrmals vorkommen. Huh?

    werte können auch in einer map beliebig oft vorkommen, aber schlüssel halt nur einmal.

    und in de rmultimap kann beides beliebig vorkommen...

    Irgendwie sogar irgendwie logisch. Danke 🤡



  • janmerkschien schrieb:

    ...aber ich bekomme es einfach nicht hin...

    Es wäre mal wieder Zeit für ein komplettes Minimalbeispiel und einer Erklärung, was das ganze eigentlich sein/leisten soll.



  • hab jetzt ne lösung danke für eure hilfe 🙂


Anmelden zum Antworten