Przy usuwaniu ze zbioru SET pojawiają się dziwne dane

0

Witajcie drodzy forumowicze,
posiadam tak prosty i krótki fragment kodu programu]

 for (c=liczby.begin(); c!=liczby.end(); ++c){
                    cout << *c << ". ";   //!!!!!!!!!!!!!!!!
                    if(*c/2>5)     
                       liczby.erase(*c);
               }
 

, który jest dla mnie niezwykle uciążliwy. Przy wypisaniu całości zbioru przed operacją usuwania wszystko jest jak należy i zbiór jest kompletny bez "śmieci". Po usunięciu jakiegoś elementu zbioru w zaznaczonym miejscu wypisuje mi dziwnie duże liczby, których nigdy nie dodałem do zbioru i nie wiem skąd się wzięły, a skoro ich nie ma w zbiorze powstaje błąd. Wiecie co może być przyczyną? Proszę o pomoc...

0

Jeśli wykonasz erase() to iterator z tego elementu ci się psuje. Nie wolno robić tego co właśnie zrobiłeś. Rozwiązanie?

  • Przepisuj dobre liczby do nowego zbioru a potem stary usuń
  • cofaj iterator o 1 przed usunięciem liczby
0

Dodatkowo zepsuć iterator może zmiana jakiegoś elementu, dodanie nowego, ponieważ set jest wewnętrznie zawsze posortowany.

0

Dziękuje Wam bardzo za porady. Już biorę się za poprawę kodu i testowanie.

à propos tej struktury, to istnieje jakaś inna podobna, bądź potrafiąca zastąpić ją ale o wiele szybsza (szybkie usuwanie ze struktury i jej przeszukiwanie)?

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