Probleme beim Map-iterieren



  • Hi,
    ich habe irgendwie probleme mit meinen maps. Ich inserte (.insert()) 3 paare in meine map und lasse die map anschließend iterieren... jedoch findet er komischer weise nur einen eintrag...

    if (...blabla...)
    {
        std::cout << "Ausgabe" << std::endl;
        Items.insert( make_pair (Ogre::Vector2(x,y),(*i_Spellcristals)));
    }
    //... etwas weiter später in der funktion ...
    map<Ogre::Vector2, SEItem*>::iterator itest;
    for (itest = Items.begin(); itest != Items.end(); itest++)
    {
        std::cout << "Iteratorausgabe" << std::endl;
    }
    

    "Ausgabe" wird bei mir 3 mal ausgegeben (so wollte ich es auch haben), aber wenn später iteriert wird, wird mir "Iteratorausgabe" nur ein einziges mal ausgegeben.
    Was habe ich falsch gemacht?



  • Prüf mal mittels Items.insert(...).second ob die Werte überhaupt eingefügt wurden.



  • Wenn nicht (eingefügt wird): Wie ist der operator< von Vector2 implementiert? Strikt-Weak-Ordered?



  • finix schrieb:

    Prüf mal mittels Items.insert(...).second ob die Werte überhaupt eingefügt wurden.

    Hm, das bekomme ich leider nicht auf die Reihe. Ich hab aber mal mit .find() nach den x und y koodinaten gesucht und mir dann von meinem SEItem* dessen namen ausgeben lassen. seltsamer weise hat er immer den ersten eingefügten Namen ausgespuckt...

    Was ist Strikt-Weak-Ordered?

    Ogre::Vector2 ist eine Vektorklasse von der GrafikEngine Ogre. Die Klasse bestimmt einen Punkt in einem 2Dimensionalen Raum.



  • Ändern sich denn zwischen den einzelnen insert()-Aufrufen die Koordinatenwerte? Wenn nicht, versuchst du dreimal den selben Punkt einzutragen - und da map<> keine Duplikate zulässt, wird nur der erste Wert übernommen (also entweder du stellst sicher, daß die Punkte sich unterscheiden oder du steigst auf multimap<> um).


Anmelden zum Antworten