Jak usuwać elementy z seta?

Jak usuwać elementy z seta?
jedrzejd
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:25
0

Witam ma taki problem mam petle która przechodzi seta i usuwam w nim i dodaje rzeczy
przy wyrzuceniu i nastepnym iterecji program craszuje sie pomocy

Oto fragment kodu

Kopiuj
for(it=tab.begin();it!=tab.end();++it){
    int c,d;
    c=(*it).first;
    d=(*it).second;
    if(d>=a&&d<b){
        tab.insert(make_pair(c,b));
        tab.erase(*it);
        a=min(c,a);
        czy=1;
    }
    else if(c<=b&&a<c){
        tab.insert(make_pair(a,d));
        tab.erase(*it);
        b=max(b,d);
        czy=1;
    }
}
edytowany 1x, ostatnio: jedrzejd
fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

Nie możesz zmieniać wielkości kolekcji gdy po nim iterujesz. Twórz nowa a stara skasuj (najlepsza jest funkcja co będzie zwracać nowa kolekcje

fasadin
stworz pusta kolekcje przed petla, umiesc tam wszystkie elementy ze starej kolekcji (podaj jako parametr w konstrutkorze to sie od razu skopiuja elementy) i w petli (warunki takie jakie masz) usuwaj z tej nowej kolekcji i ja edytuj (dodawaj do niej).
AL
@fasadin przy vectorze nie może w ogóle, ale przy set to inaczej działa.
AL
@fasadin przy vectorze nie może w ogóle, ale przy set to inaczej działa.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:dzień
  • Lokalizacja:Szczecin
2

Zarówno insert jak i erase zwracają iteratory. Iterator do usuniętego elementu nie jest poprawny i jakiekolwiek operacje na nim (np. inkrementacja) to UB. Opisz co chcesz zrobić, bo nie chce mi się zgadywać z kodu.


jedrzejd
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:25
0

jesli zachodzi warunek scalic przedzialy i wrzucic do seta i wyrzucic ten z ktory scalałem je

edytowany 1x, ostatnio: jedrzejd

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.