An den letzten / neuesten Eintrag in einer std::map herankommen
-
Mein Visualstudio bietet mir bei deiner Methode die Funktionen an, allerdings gibt es immer die Meldung "Zeigeroperation ungültigt", Beispiel:
*(--map.end())->second->Name(); // Liefert string zurück, Name() wird mir auch angebotetn, Meldung ist aber Zeigeroperation ungültig
-
)0( schrieb:
Mein Visualstudio bietet mir bei deiner Methode die Funktionen an, allerdings gibt es immer die Meldung "Zeigeroperation ungültigt", Beispiel:
*(--map.end())->second->Name(); // Liefert string zurück, Name() wird mir auch angebotetn, Meldung ist aber Zeigeroperation ungültig
So dann?
(--map.end())->second->Name();
-
Das Objekt vor dem end-Iterator ist aber nicht das zuletzt eingefügte, sondern das mit dem größten Key. Über die Einfügereihenfolge kannst du später nichts mehr erfahren.
-
Perfektus, danke!
-
Verdammt, also zu früh gefreut...
Es gibt also keine Möglichkeit für mein Problem (außer ich baue die Funktionen um?)
-
du könntest std::map wrappen und das zuletzt eingefügte zusätzlich nochmal speichern.
-
Hmm, nee, zuviel Aufwand, dann liefert mir meine acceptmethode einfach die IP des neuesten akzeptierten clients zurück
-
dann brauchst du anderen datentyp
denn eine map beinhaltet nur die
key und value
die positionen interessieren nicht
ok dich jetzt schon
hmm dann keinst du nur eines machendir für jedes key value noch einen unsigned int machen
beim programmstart geht er die Uint werte durch, merkt sich den grössten, beim neuen key/value bekommt der neue halt dann den wert um eins erhöht
denkt aber dran, du kannst nicht den letzten mapeintrag nehmen, da kann auch der kleinste int stehen, musst dir schon merken
mehr weiss ich auch nicht
wenn es dich nicht so juckt mit der map kannste auch einen vector nehmen, falls dir das reicht
vector<meinestruct> // meinestruct = (string key, int value) z.b.
nachteil - da kannst aber nicht so einfach nach einem key suchen, oder wert einfügen
========================= fazit
oder du nimmst liste, ist glaube ich eher das was du suchst, oder???
-
Bashar schrieb:
Das Objekt vor dem end-Iterator ist aber nicht das zuletzt eingefügte, sondern das mit dem größten Key. Über die Einfügereihenfolge kannst du später nichts mehr erfahren.
Ah stimmt, das ist mir grade erst aufgefallen.
_newkid schrieb:
oder du nimmst liste, ist glaube ich eher das was du suchst, oder???
Wie kann ihm das helfen? Er braucht doch nen assoziativen Container.
Oder er macht den Hack a lastd::vector<std::pair<int, std::string> > vec;
. Ist aber auch nicht das Wahre.
-
bei deinem vorschlag muss er ja selber sich kümmern wenn er von einem key den wert braucht
ne liste halt
kann der ja schnell durchsuchen lassen, und das neueste element ist immer das letzte, ausser er macht ein insert irgendwo mitten rein, was beim vector oder so genau so geschehen kann.
wie gesagt er kann ja in der map einen INT wert mitspeichern und wie gesagt den beim programmstart halt einmal die map durchgehen und nach dem grössten int schauen
das ganze nennt sich dann
multimap --> auch in <map> drinnen
multimap :
Speichert Schlüssel/wert-paare, wobei jeder schlüssel zwei oder mehr werten zugeordnet sein kannz.b. in "seinem" bsp
beim ersten anlegen
map --> Key: www.google.de Value: 89.xx.xx.xx:27960 und jetzt noch als 2ten wert ein int mit wert "1"
wenn er die ja so anlegt, kann der doch den neusten selbst dursuchen mit
iterator begin to end und merkt sich welcher key/value wert 1 den grössten int hat ( also key und da value wert 2 )
-
wie wärs mit: einfach 2 container nehmen
eine liste wo die die keys in einer art stack liegen und dann die map die key und value assoziiert...
dazu wrapt man die map einfach und fertig