ein pair in die Map einfügen

BLR

Erfahrenes Mitglied
Hallo, ich versuche ein "pair" in eine map einzufügen.
ich habe das hinbekommen, allerdings verstehe ich nicht, wieso es nicht funktioniert, wie ich es mir ursprünglich gedacht hab und wieso es so funktioniert,, wie es jetzt ist:

Ursprünglich:

C++:
map<int, tmpIntervalPair > mapFuerZahlen;
pair<int, int> zahlenPaar;
mapFuerZahlen[zahl] = zahlenPaar(100,100);

Wie es funktioniert:

C++:
 typedef pair<int, int > zahlenPaar;
map<int, tmpIntervalPair > mapFuerZahlen;
mapFuerZahlen[zahl] = zahlenPaar(100, 100);

Wieso funktioniert das erste nicht, und was macht dieses "typedef", sodass es funktioniert??
danke

P.S

Und weiter versuche ich über "mapFuerZahlen" in einer anderen Klasse zu interieren, wofür ich den Iterrator brache:
C++:
 void meineMethode(map<int, pair<int, int >& intervalPair){
map<int, pair<int, int> >::interrator = mapFuerZahlen.begin()
}
Da dachte ich mir, dass ich wieder mit typedef arbeiten muss, so habe ich das argument in der Methode genauso mit typedef deklariert "mapFuerZahlen", aber das funktioniert auch nicht.
Wie impelementiere ich das?
Danke
 
Zuletzt bearbeitet:
Hallo BLR

Da du unglaublich viele krasse Fehler in den Codesnippets hast gehe ich davon aus, dass du die einfach jetzt mal so von Hand hier im Forum geschrieben hast?

C++:
map<int, tmpIntervalPair > mapFuerZahlen;
pair<int, int> zahlenPaar;
mapFuerZahlen[zahl] = zahlenPaar(100,100);

Was ist tmpIntervalPair? Dass die dritte Zeile nicht funktioniert sollte einleuchten, zahlenPaar ist eine Variable vom Typ pair<int, int>. zahlenPaar(100, 100) ruft also den operator ()(int, int) aus pair<int, int> auf. Einen solchen Operator gibts aber nicht, ergo gibt das einen Fehler.

Warum das funktioniert:
C++:
map<int, tmpIntervalPair > mapFuerZahlen;
typedef pair<int, int> zahlenPaar;
mapFuerZahlen[zahl] = zahlenPaar(100,100);

liegt daran wofür typedef ist. Bei einem grundlegenden Keyword einer Sprache ist es wohl effizienter das kurz zu googlen als in nem Forum nachzufragen, was es macht. Daher nur kurz: typedef definiert einen Typen. Somit wird also ein neuer Typ definiert mit dem Namen zahlenPaar der identisch ist mit pair<int, int>.

C++:
 void meineMethode(map<int, pair<int, int >& intervalPair) {
     map<int, pair<int, int> >::interrator = mapFuerZahlen.begin()
}

interrator? Meinst du iterator? mapFuerZahlen? Meinst du intervalPair? map<int, pair<int, int>& -> hier fehlt ein schliessendes >. Was funktioniert nicht?

Viele grüsse
Cromon
 
Sorry, ja du hast recht, ich hab das so ein getippt :)
Ich habe das Problem gelöst.
Nach wie vor ist es unklar, wieso ich einen Alias beim Aufrufer fürs "pair"-Objekt deklarieren muss:
Aber in der Methode (einer Klasse) ich auf typedef verzichten kann.
Ausschnitt:

C++:
main(){
MeineKlasse m;
typedef pair<int, int > zahlenPaar; //hier deklariere ich mit typedef, damit es funktioniert
map<int, intervalPair > zahlenPaarMap; //hier musste ich typedef eben verwenden
zahlenPaarMap[zahl] = std::make_pair(100, 100); //hinzufügen. Ohne typedef funktioniete das nicht

m.meineFunktion(zahlenPaarMap); //Aufruf
}

//In dem Argument komischeweise kein Typedef für "pair"
void MeineKlasse::meineFunktion(map<int, pair<int, int> >& myMap) {
    map<int, pair<int, int> >::iterator itr = myMap.begin(); //hierfür auch kein typedef für pair
   for (itr; itr != myMap.end(); ++itr) {
   .....
  }
}
 

Neue Beiträge

Zurück