An den letzten / neuesten Eintrag in einer std::map herankommen



  • )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 machen

    dir 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 la

    std::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 kann

    z.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 🙂


Anmelden zum Antworten