[C++] Iterator instellen en pairs

Pagina: 1
Acties:

  • Knakker
  • Registratie: April 2000
  • Laatst online: 19-04 11:48
Ik durf het hier eigenlijk niet te vragen, want dit is volgens mij heel basic ... maar ik loop me nu al 3 uur suf te zoeken, en ik kom nergens tegen wat ik weten wil.

Ik heb een map<pair<int, int>, int> genaamd PC. Via een for-loop waarmee ik op een gegeven moment een subset van mijn map evalueer (dit doe ik niet via een iterator naar de map), bepaal ik op een gegeven moment bijvoorbeeld dat PC[make_pair(102, 236)] de index is die ik zoek. Nu wil ik een map<pair<int, int>, int>::iterator genaamd PCIter instellen die naar die positie. Hoe doe ik dat? C++ gooit onbegrijpelijke 20-regelige STL errors eruit bij alles wat ik probeer...

En stel dat die iterator ingesteld is, hoe kan ik iterator->first dan zo ontleden dat ik de twee elementen uit de pair krijg?

Bedankt :)

[ Voor 5% gewijzigd door Knakker op 18-11-2005 15:47 ]

Geef mij maar een Warsteiner.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:12

.oisyn

Moderator Devschuur®

Demotivational Speaker

De value_type van een map<A,B> is een pair<A,B>. Oftewel, de iterator die uit jouw map komt wijst naar een pair<pair<int, int>, int>. Met find kun je een element zoeken, welke een iterator returnt naar dat element. Of je gebruikt gewoon de [] operator als je zeker weet dat dat element al bestaat. Maar als je een iterator hebt, dan kun je dus bij je values door iter->first.first en iter->first.second te gebruiken. iter->second zal naar die int wijzen

[ Voor 5% gewijzigd door .oisyn op 18-11-2005 16:03 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Knakker
  • Registratie: April 2000
  • Laatst online: 19-04 11:48
Okee, dus als ik het goed begrijp is "find" de enige methode? Het leek me wat omslachtig, maar opzich is het dat ook niet omdat het systeem ook niet kan ruiken waar (102, 236) zich bevindt in de map.

PCiter = PC.find(make_pair(102, 236)) werkt in ieder geval zonder problemen, en bedankt voor het tweede antwoord!

Geef mij maar een Warsteiner.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
operator[] is natuurlijk wel leuk en snel, maar heeft als grote nadeel dat je een non-const map nodig hebt. Niet altijd wat je wil, map.find() is generieker. Onder water is operator[] natuurlijk een find (oid), eventueel gevolgd door een insert.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Knakker
  • Registratie: April 2000
  • Laatst online: 19-04 11:48
Nog een vraag:

Bestaat er een functie waarmee ik eenvoudig kan checken of één van de twee waarden in de pair gelijk is aan een bepaalde waarde A?

Ik heb twee iterators waarvan ik moet weten of één van de twee waarden in de pair overeenkomt met A of B, en op dit moment doe ik dat met 8 if-statements :P

Bedankt!

Geef mij maar een Warsteiner.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:12

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dan maak je die functie toch gewoon? :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Knakker
  • Registratie: April 2000
  • Laatst online: 19-04 11:48
Hmm... dat is zowaar een idee :P

Geef mij maar een Warsteiner.

Pagina: 1