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(...).secondob 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(...).secondob 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).