Avatar billede jules_colding Nybegynder
26. april 2005 - 12:32 Der er 6 kommentarer

std::map iterator gyldighed

Hej,

Situationen er, at jeg har defineret en iterator, en class samt en std::map cirka som følger:

class User {
public:
        void foo(void);
        char *name;
}
std::map<char*, User*> user_list;
typedef std::map<char*, User*>::iterator it;

Jeg har derefter indsat flere elementer i user_list, deriblandt et element under entrien "bar". Dette element har jeg fundet en iterator, der peger på, ved at udføre:

it i = user_list.find("bar");

Jeg har derefter, fra andre threads, indsat og slettet elementer samt modificeret "name" i mit "bar" element.

Mit spørgsmål er så, om "i" stadig peger på det samme element eller om "i" invalideres af mine operationer på user_list?

Det skal tilføjes, at user_list er beskyttet mod samtidig tilgang af en mutex.

På forhånd mange tak,
  jules
Avatar billede bertelbrander Novice
26. april 2005 - 19:28 #1
På denne side: http://www.sgi.com/tech/stl/Map.html står der:

"Map has the important property that inserting a new element into a map does not invalidate iterators that point to existing elements. Erasing an element from a map also does not invalidate any iterators, except, of course, for iterators that actually point to the element that is being erased."

Så i peger stadig på det samme element, selv om der er indsat eller fjernet andre elementer fra map'en.
Avatar billede jules_colding Nybegynder
27. april 2005 - 08:49 #2
Tak for svaret! Hvordan er det lige at jeg giver dig de 60 point?
Avatar billede bertelbrander Novice
27. april 2005 - 19:34 #3
Man kan kun give point til "svar", men da jeg ikke samler på point laver jeg kun "kommentar".
Lav selv et svar og accepter det, så får du dine point tilbage, og spørgsmålet bliver lukket.
Avatar billede jules_colding Nybegynder
28. april 2005 - 09:49 #4
Jeg accepterer kommentaren fra bertelbrander som svar, men da han ikke vil have sine retmæssige point tager jeg dem tilbage til en anden god gang. Tak for hjælpen bertelbrander :-)
Avatar billede jules_colding Nybegynder
28. april 2005 - 09:52 #5
Hmm... det kan man åbenbart ikke.
Avatar billede segmose Nybegynder
28. april 2005 - 15:34 #6
Du har glemt at acceptere dit eget svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester