2012-03-07 7 views
6

setの要素を変更したいので、set<T>::iteratorを使用しました。しかし、コンパイラは「要素はconstです」と主張しています。次に、set<T>::iteratorconst_iterator ...セットされた要素を変更するには?

だから、私はどのように要素を変更できますか?それを消去してから新しいものを挿入しますか?

答えて

20

setの要素はソートされた順序になります。要素の変更が許可されている場合、この並べ替え順序は維持できません。したがって、アイテムを変更することはできません。既存の要素を消去し、新しい要素を挿入する必要があります。

+5

要素に加えられた変更の中には、ソート方法に影響を与えないものもあります。ソート順に影響しないと確信する変更を加えたい場合、最後の手段として常に 'const_cast'があります。危険で美しいものではありませんが、それにもかかわらずです。 – jogojapan

+0

ありがとう。私はそれを知っています。これが要素を変更する唯一の方法ですか? –

+2

'erase'は、それが呼び出すユーザコードがスローしない限りスローしませんので、新しい要素を挿入して古い要素を削除する方が良いでしょう。それはあなたに強い例外保証のチャンスを与えます。 –

0

EDIT:setの特定の場所に要素を追加することはできません。あなたが何をしていても、セットはソートされた順番でなければなりません。したがって、特定の要素を消去し、新しい要素を挿入して、setの順序が失われないようにする必要があります。

setについてさらに読む!

関連する問題