2012-03-07 11 views
6

Quiero cambiar el elemento en un set, entonces utilicé set<T>::iterator. Sin embargo, el compilador argumenta que "el elemento es const". Entonces me di cuenta de que set<T>::iterator es un const_iterator ...¿Cómo cambiar un elemento establecido?

Entonces, ¿cómo puedo cambiar el elemento? ¿Borrarlo e insertar uno nuevo?

Respuesta

20

Los elementos del set estarán ordenados. Si puede modificar un elemento, este orden de clasificación no puede mantenerse. Por lo tanto, no puede modificar el artículo. Necesita borrar el elemento existente e insertar uno nuevo.

+5

Sin embargo, se debe mencionar que algunos cambios en un elemento no afectan la forma en que se ordenan. Si desea realizar un cambio que esté seguro de que no afecta el orden de clasificación, siempre hay 'const_cast' como último recurso. Arriesgado y no hermoso, pero sin embargo. – jogojapan

+0

gracias. Lo sé. ¿Entonces esta es la única forma de modificar el elemento? –

+2

Como 'erase' no arroja a menos que el código de usuario que llama arroja, probablemente sea mejor insertar el nuevo elemento y luego borrar el anterior. Eso le da una oportunidad de la fuerte garantía de excepción. –

0

EDITAR: No puede agregar un elemento a una ubicación específica en el conjunto. el conjunto debe estar en el orden ordenado, sean cuales sean las operaciones que realice. Por lo tanto, debe borrar el elemento específico e insertar el nuevo elemento para que el orden del conjunto no se pierda.

¡También lea más sobre set!

Cuestiones relacionadas