2012-03-07 32 views
6

我想更改set中的元素,所以我使用了set<T>::iterator。然而,編譯器認爲「元素是const」。然後我意識到set<T>::iterator是一個const_iterator ...如何更改設置元素?

那麼,我該如何改變元素?擦除它,然後插入一個新的?

回答

20

set的元素將按排序順序排列。如果允許修改元素,則不能保持該排序順序。因此你不能修改該項目。您需要清除現有元素並插入一個新元素。

+5

但應該提及的是,元素的一些更改不會影響它的排序方式。如果你想做一個你肯定不會影響排序順序的變化,總是有'const_cast'作爲最後的手段。風險並不大,但不過。 – jogojapan 2012-03-07 11:52:09

+0

謝謝。我知道。所以這是修改元素的唯一方法? – 2012-03-07 11:57:25

+2

由於'erase'不會拋出,除非它調用的用戶代碼拋出,否則插入新元素然後擦除舊元素可能會更好。這給你一個強大的例外保證的機會。 – 2012-03-07 11:57:57

0

編輯:你不能添加元素到集中的特定位置。無論您做什麼操作,該集應該按排序順序。所以你必須擦除特定元素並插入新元素,以便set的排序不會丟失。

也讀了更多關於set