2012-03-07 25 views
6

Bir set elementini değiştirmek istiyorum, bu yüzden set<T>::iterator kullandı. Ancak, derleyici "öğe const" olduğunu savunuyor. Sonra farkettim ki, bu 'un const_iterator ...Bir ayar elemanı nasıl değiştirilir?

Öğeyi nasıl değiştirebilirim? Sil ve sonra yeni bir tane mi?

cevap

20

set'un öğeleri sıralanmış sırada olacaktır. Bir öğeyi değiştirmeye izin verildiyse, bu sıralama sırası korunamaz. Bu nedenle, öğeyi değiştiremezsiniz. Mevcut öğeyi silmeniz ve yeni bir tane eklemeniz gerekir.

+5

. Sıralama sırasını etkilemediğinden emin olmak için bir değişiklik yapmak isterseniz, her zaman son çare olarak 'const_cast' vardır. Riskli ve güzel değil, ama yine de. – jogojapan

+0

Teşekkürler. Bunu biliyorum. Yani bu unsuru değiştirmenin tek yolu bu mu? –

+2

"Silme", ​​arama yaptığı kullanıcı kodu alamadığı sürece atmadığından, yeni öğeyi eklemek ve ardından eski olanı silmek daha iyi olur. Bu size güçlü istisna garantisine sahip olma şansı verir. –

0

DÜZENLEME: Sen sette belirli bir konuma bir öğe eklemek olamaz. Yaptığınız işlemler ne olursa olsun set sıralanmış sıraya göre olmalıdır. Yani, belirli bir elemanı silmeniz ve yeni öğeyi, setin siparişinin kaybolmaması için eklemeniz gerekir.

Ayrıca set!

Bir elementin bazı değişiklikler o sıralanmış nasıl etkilemediğini olsa da, söz edilmelidir