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