sobota, 29 grudnia 2007

Funkcja erase( key ) w strukturze multiset

Czy wiesz co wypisze następujący kawałek kodu?
multiset<int> S;
S.insert(90); // wstaw 90 do zbioru S
S.insert(90); // jeszcze raz
S.erase(90);
if (S.empty()) printf("Zbiór S jest pusty.");

Program wypisze, że zbiór jest pusty.
Dzieje się tak dlatego, iż procedura erase(key) usuwa wszystkie elementy o kluczach key. Dziwne? Wiem, bo w dokumentacji piszą co innego.

Jeśli chcesz usunąć dokładnie jeden element z multiset'a, to powinieneś zrobić to tak:
S.erase( S.find(90) );

1 komentarz:

Anonimowy pisze...

W dokumentacji, z której korzystam jest ok :P Ale faktycznie można się nadziać :)