Standardcontainer: Multimap



  • Hi Community!

    Ich habe ein Problem mit den Standardcontainern. Genauer gesagt, mit dem Multimap. Hier ertmal ein bisschen Code:

    #include <map>
    multimap<string, string> head;
    
    typedef multimap<string, string>::iterator I;
    pair<I, I> p = head.equal_range(fieldname);
    for(I i=p.first; i!=p.second; ++i)
    	cout << i->second << endl;
    

    oder auch:

    typedef multimap<string, string>::iterator I;
    
    for(I i = head.begin(); i != head.end(); ++i)
    	cout << i->first << " ... " << i->second << endl;
    

    Warum funzt das nicht? Der Code stammt (mit ein paar Änderungen) aus dem Stroustrup.

    Mit dem BCB bekomme ich immer solche Fehlermeldungen:

    Pointer to structure required on left side of -> or -> in function ...*

    Was mache ich denn falsch?

    Thx im Voraus
    Konstantin



  • liegt wohl an BCB, mit VC++ kann ich das ohne probleme übersetzen.

    Grüße



  • Mit gcc 3.2 lässt es sich auch ohne Probleme compilieren.



  • Probier mal (*i).first und (*i).second!

    EDIT:Klammer falsch gesetzt



  • Ist es eigentlich irgendwo garantiert, dass Iteratoren ein -> haben? Oder muss man immer (*). schreiben? (Was macht die Sprache da auch zwei Sachen draus... *redesignen woll* :/)



  • KPC schrieb:

    Probier mal (*i).first und (*i).second!

    EDIT:Klammer falsch gesetzt

    Danke! Das funktioniert!



  • operator void schrieb:

    Ist es eigentlich irgendwo garantiert, dass Iteratoren ein -> haben? Oder muss man immer (*). schreiben? (Was macht die Sprache da auch zwei Sachen draus... *redesignen woll* :/)

    Laut Standard ist bei einem iterator, für den der ausdruck (*i).m wohldefiniert ist, der ausdruck i->m mit ersterem gleichbedeutend.
    (steht bei den iterator requirements)



  • Danke. Ich habe aus Paranoia oft genug (*i) geschrieben 🙂


Anmelden zum Antworten