stl中的關聯容器是一種動態資料結構,其資料儲存方式是以記憶體節點方式的資料結構,具體來說一般是一種平衡二叉樹(紅黑樹),在向關聯容器插入元素的時候,容器內部為了保持樹的平衡性,會自動(插入函式有自我調整**)的調整當前插入元素的儲存位置,達到動態平衡的目的。
所以在關聯容器儲存的是指標的時候,如果是採用預設的比較物件,那麼由於是指標,那麼整個容器的元素肯定是按照插入元素的指標來排列,然而由於是節點儲存方式,分配的每個節點的位址的數值大小是定的,所以會造成容器內部的元素排序方式是不能控制。
這種情況下對容器的操作,比如set容器,是按照鍵值來排序的(對於非指標元素),但如果是儲存指標型別,對set的操作,比如列印,會發現元素的列印結果是沒有按照插入的順序來的。
所以,在關聯容器儲存的是指標型別時,需要我們自己指定對應的比較物件,是的,提供的應該是乙個函式物件,因為容器模板的引數接受的是型別,並非是一般的函式哦。
總結下:
在使用關聯容器時,如果儲存的是指標,又想按照指標指向的物件的某個字段順序儲存,需要自己實現比較函式物件。作為第二個引數傳入構造。
為包含指標的關聯容器指定比較型別
我寫下這樣的 set ssp ssp.insert new string ant ssp.insert new string wom ssp.insert new string lem ssp.insert new string pen for set const iterator i ssp.be...
為包含指標的關聯容器指定比較型別
effective stl讀書筆記 今天看了一條,寫下來當做筆記,其實挺好理解的,也挺簡單的 我們知道,當我們建立乙個關聯容器時,比如set或者map,它會要求 我們指定乙個比較函式子類。如果我們不指定就會採用預設的比較函式子類,當然在某些情況下會產生錯誤。比如下面的 輸出的結果並不是我們想要的按字...
為指標的關聯容器指定比較型別
假定有乙個string 指標的set,你把一些動物的名字插入set setssp ssp.insert new string anteater ssp.insert new string wombat ssp.insert new string lemur ssp.insert new string...