Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

killmichnich

unregistriert

1

04.02.2009, 17:24

map iterator

Hi Leute,
ich hab da n kleines problem:
ich hab ne map, und will da nen iterator "einbauen". Klappt nur nich so ganz:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
class CGegner { ... };
map<int, CGegner>mymap;
map<int, CGegner>myiterator;

dann wollt ich sowas machen:

for(myiterator=mymap.begin(); myiterator!=mymap+end(); myiterator++)
{
       Gegner[*myiterator].Draw();
}


es soll halt alle Gegner, die in der map sind, zeichnen, ohne dass ich zusätzlich iwas brauch.
es kommt dann son error:

error C2679: binary '[' : no operator found which takes a right-hand operand of type 'std::allocator<_Ty>::value_type' (or there is no acceptable conversion)|

was machich da falsch, und wie muss ichs richtig machen?

würd mich über hilfe sehr freuen ^^

MfG

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

04.02.2009, 17:27

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class CGegner { ... };
map<int, CGegner> mymap; //bitte mit abstand..

map<int, CGegner>::iterator myiterator;

for(myiterator=mymap.begin(); myiterator!=mymap.end(); myiterator++)
{
       myiterator->second.Draw();
} 


Hier zum nachschauen:
http://www.cplusplus.com/reference/stl/map/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

04.02.2009, 17:28

Re: map iterator

probier mal so:

C-/C++-Quelltext

1
2
3
4
5
6
7
class CGegner { ... };
map<int, CGegner> mymap;

for(map<int, CGegner>::iterator myiterator = mymap.begin(); myiterator != mymap.end(); ++myiterator)
{
  myiterator->second.Draw();
}

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

04.02.2009, 17:30

*psst dot*

C-/C++-Quelltext

1
myiterator->second.Draw(); 

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

04.02.2009, 17:34

*dumdidumdidum* ...

killmichnich

unregistriert

6

04.02.2009, 17:39

he cool danke :D

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

7

04.02.2009, 17:55

Wenn du als schlüssel sowieso einen int nimmst, wäre ein std::vector besser für dich geeignet, mit offset adressierung kannst du wesentlich schneller arbeiten und du kannst das ganze auch viel schneller durchlaufen (mit dem [] operator dem übergibst du deinen int, so wie bei einem normalen array, ist schneller wie nen iterator).

Socke

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

04.02.2009, 17:59

Zitat von »"Faule Socke"«

Wenn du als schlüssel sowieso einen int nimmst, wäre ein std::vector besser für dich geeignet, mit offset adressierung kannst du wesentlich schneller arbeiten und du kannst das ganze auch viel schneller durchlaufen (mit dem [] operator dem übergibst du deinen int, so wie bei einem normalen array, ist schneller wie nen iterator).


Prinzipiell hast du recht, allerdings bedeutet ein int als Schlüssel noch lange net dass es sich dabei um indices handelt. Könnten genausogut Telefonnummern sein. Und in dem Fall würd ich mir die Sache im Hinblick auf Speicherverrauch nochmal genau überlegen...

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

9

04.02.2009, 18:04

Zitat von »"dot"«

Zitat von »"Faule Socke"«

Wenn du als schlüssel sowieso einen int nimmst, wäre ein std::vector besser für dich geeignet, mit offset adressierung kannst du wesentlich schneller arbeiten und du kannst das ganze auch viel schneller durchlaufen (mit dem [] operator dem übergibst du deinen int, so wie bei einem normalen array, ist schneller wie nen iterator).


Prinzipiell hast du recht, allerdings bedeutet ein int als Schlüssel noch lange net dass es sich dabei um indices handelt. Könnten genausogut Telefonnummern sein. Und in dem Fall würd ich mir die Sache im Hinblick auf Speicherverrauch nochmal genau überlegen...


Haha telefonnummern^^ von seinen gegnern lol^^ ok aber ich weiß was du meinst. ich bin halt davon ausgegangen, dass er da sowieso blos durchzählt, also @threadersteller, wofür brauchst du den int?

Socke

killmichnich

unregistriert

10

04.02.2009, 18:06

wie du gesagt hast, zum durchzählen ^^
aber das mit den telefonnummern wär auch ne originelle idee xD

aber ich glaub bei so nem kleinen 2D-Programm macht das keinen großen unterschied von der geschwindigkeit oder is das so extrem?

Werbeanzeige