2013-08-29 5 views
7

Come la domanda dice, è possibile rimuovere un elemento da un std::unordered_set utilizzando un iteratore del secchio (local_iterator)? Vedo due possibili soluzioni:È possibile rimuovere elementi da uno std :: unordered_set attraverso gli iteratori del bucket?

  • Dal erase() non solo accetta globale iterator s, v'è la funzionalità equivalente per local_iterator?
  • È possibile ottenere l'equivalente globale iterator per un local_iterator?

Se non è fattibile, si prega di approfondire perché non lo è.

+3

Non è possibile utilizzare sia 'it' che' ++ it' nella stessa chiamata di funzione. –

+0

Aggiornato, ha comunque lo stesso errore. –

+2

Si dovrebbe leggere su ['std :: remove_if'] (http://en.cppreference.com/w/cpp/algorithm/remove). In realtà non rimuove elementi. –

risposta

5

La risposta ovvia è no, poiché non c'è alcuna funzione nell'interfaccia che supporta questo. Non c'è anche modo di arrivare a un iterator da un local_iterator, per l'ovvia ragione che uno local_iterator contiene molte meno informazioni. (Per la maggior parte delle implementazioni di , sospetto che sarebbe abbastanza semplice implementare lo erase(local_iterator) . D'altra parte, non riesco a pensare a un utilizzo ipotizzabile , che potrebbe essere il motivo per cui lo standard non lo richiedeva)

+0

Dubito sia degli argomenti "ovvi". (1) Quale altro numero di bucket sarebbe necessario per trasformare un local_iterator in un iteratore? (2) Esistono molti casi d'uso per cancellare local_iterator quando si esegue l'iterazione su un bucket, proprio come esistono casi d'uso per cancellare gli iteratori durante l'iterazione sul contenitore completo. Senza cancellare per local_iterator, c'è qualche differenza tra const_local_iterator e local_iterator di std :: unordered_set? – chs

Problemi correlati