條目二十二《切勿修改set或multiset的鍵》

2022-02-04 02:59:35 字數 854 閱讀 6555

所有的標準關聯容器一樣,set和multiset按照一定的順序來存放自己的元素,而這些容器的正確行為也是建立在其元素保持有序的基礎之上的。如果你把關聯容器中乙個元素的值改變,那麼元素在容器的位置就被破壞。

對於map和multimap來說,這應該是比較容易在編碼期就能發現問題的。因為它們的模板型別是pair,k是const,所以如果修改k就會在編譯時報錯。

對於set或multiset來說,在編碼期可能發現不了問題,因為它們的模板型別是k,而且k是非const的,所以能夠被修改。

但是按照開頭的關聯容器的鍵不能修改結論,如果修改了set或multiset的,容器就會被破壞。

注意了,這裡的指的是真正作為鍵的值不能被修改,其實如果鍵是乙個結構體裡的乙個成員,那麼除了這個成員不能被修改,其他被修改是沒問題的。這也是不能把set或multiset的鍵設為const的原因。

然而,不同stl廠商對set和multiset的鍵是否可被修改,也就k返回是否是const作不同的處理,所以為了可移植性,應該統一,別修改set和multiset的

除了使用對迭代器去const再取位址的方法

來修改健值:

'const_cast< employee&> * itr->setvalue()'

一種總是可行而且安全的方式來修改set、multiset、map和multimap中的元素,則可以分5個簡單步驟來進行:

讀 > 改 > 寫 三部曲

二十二,雜感

恩,二十二了,感覺是個turning point。二十二是中國男公民法定結婚年齡,但是因為我連女朋友都沒有,所以,這個話題暫不談論。其實剛到上海的時候,就準備把那些將要發生的辛酸點滴記錄下來,可是不知怎麼的,真正到辛酸的時候,卻不想去記憶了。那些歷程確實值得懷念,但是想起來就感覺不好,或許這就是所謂...

二十二 封裝

namespace demo7 this.age age this public int getage public void stuinfo 年齡為 方式一 public int age 方式二 private int age 字段 內部 public int age 讀取許可權 set 預設屬性...

HTML 頭部(二十二)

頭元素包含關於文件的概要資訊,也稱為元資訊 meta information meta 意為 關於某方面的資訊 可以這麼說,元資料 meta data 是關於資料的資訊,而元資訊是關於資訊的資訊。頭元素內的元素不會被瀏覽器顯示出來。根據 html 標準,僅有幾個標籤在 html 的頭部分是合法的。它...