Mapa + struktura + vector

0

Witam

Mam pytanie dlaczego taki kod:

struct gpozycje {
       int odw;
       vector<int> pozycje;   
};
...
map<int, gpozycje> tab;

powoduje że gdy odwołam się do nieistniejącego elementu dajmy tab[6].odw to wypisze mi on jakies śmieci. Domyślnie map działa tak że jeśli odwołuje się do czegoś co nie istnieje to zwraca on 0. Doszedłem do tego że błąd powoduje użycie vector<int> pozycje; w strukturze.
Jeśli będę miał taki kod:

struct gpozycje {
       int odw;
};
...
map<int, gpozycje> tab;

to odwołanie się do nieistniejącego elementu dajmy np. tab[6].odw zwróci mi 0, a więc tak jak być powinno.

0

Domyślnie map działa tak że jeśli odwołuje się do czegoś co nie istnieje to zwraca on 0

A gdzie to wyczytales ze "map" zwraca zero ??
Standard powiedzial ze:

T& operator []( const key_type & x);
1 Effects: If there is no key equivalent to x in the map, inserts value_type(x, T()) into the map.

U mnie zarowno w pierwszym przypadku tab[6].odw jest rowne zero jak i w drugim... O_o

0

użyj tab.find!=tab.end() dla sprawdzenia czy element istnieje

0
xmoon napisał(a)

Domyślnie map działa tak że jeśli odwołuje się do czegoś co nie istnieje to zwraca on 0

A gdzie to wyczytales ze "map" zwraca zero ??
Standard powiedzial ze:

T& operator []( const key_type & x);
1 Effects: If there is no key equivalent to x in the map, inserts value_type(x, T()) into the map.

U mnie zarowno w pierwszym przypadku tab[6].odw jest rowne zero jak i w drugim... O_o

Pewnie dlatego, ze dorzuciles konstruktor ktory zeruje pola, albo g++ zrobil to za Ciebie. MSVC tego nie robi i konstruktor 'zerujacy' nalezy sobie doklepac samemu. Standard nie nakazuje kompilatorowi zerowac memberow o typie prostym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1