2013-08-29 13 views
7

Podobnie jak w przypadku pytania, czy można usunąć element z obiektu std::unordered_set za pomocą iteratora kubełkowego (local_iterator)? Widzę dwa możliwe rozwiązania:Czy można usuwać elementy ze std :: unordered_set przez iteratory kubełkowe?

  • Od erase() bierze tylko globalny iterator s, tam jest równoważne funkcjonalność local_iterator?
  • Czy można uzyskać odpowiednik globalny iterator dla local_iterator?

Jeśli nie jest to możliwe, proszę wyjaśnić, dlaczego tak nie jest.

+3

Nie można używać zarówno 'it', jak i' ++ it' w tym samym wywołaniu funkcji. –

+0

Zaktualizowany, nadal powoduje jednak ten sam błąd. –

+2

Powinieneś przeczytać na ['std :: remove_if'] (http://en.cppreference.com/w/cpp/algorithm/remove). W rzeczywistości nie usuwa elementów. –

Odpowiedz

5

Oczywistą odpowiedzią jest nie, ponieważ interfejs obsługuje tę funkcję. Nie ma również sposobu, aby uzyskać an iterator z local_iterator, z oczywistego powodu , że local_iterator zawiera dużo mniej informacji. (W przypadku większości implementacji podejrzewam, że byłoby całkiem proste zaimplementować erase(local_iterator), wymagało tego standard . Z drugiej strony nie mogę sobie wyobrazić możliwego do zastosowania , może dlatego nie wymagało tego.)

+0

Wątpię w obie "oczywiste" argumenty. (1) Jaki inny numer wiadra byłby potrzebny do przekształcenia local_iterator w iterator? (2) Istnieje wiele przypadków użycia, aby usunąć local_iterator podczas iteracji nad wiadrem - tak jak są przypadki użycia, aby usunąć iteratory podczas iteracji nad pełnym kontenerem. Bez wymazywania dla local_iterator, czy jest jakaś różnica między std :: unordered_set's const_local_iterator i local_iterator? – chs

Powiązane problemy