為包含指標的關聯容器指定比較型別

2021-07-03 07:54:38 字數 1564 閱讀 7085

我寫下這樣的**:

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.begin(); i != ssp.end(); ++i)

cout

<< *i << endl;

當然,迴圈可以寫成這樣:

for (auto i : ssp)

cout

<< *i << endl;

我們期望輸出ant,lem,pen,wom,但是輸出的是:

0035a020

0035a060

0035a0a0

0035a0e0

請按任意鍵繼續. . .

輸出的是指標,指標是按照大小來排序的。

一怒之下,你又解引用一次:

for (set

::const_iterator i = ssp.begin(); i != ssp.end(); ++i)

cout

<< **i << endl;

結果是:

0029a020

0029a060

0029a0a0

0029a0e0

antwom

lempen

請按任意鍵繼續. . .

並不是有序的。。。。。是不是**做錯了。。。。。。

set

ssp;

實際上是如下形式:

set

> ssp;

要想達到目的,就不應該使用預設的比較函式,必須重新編寫比較函式的子類,該類物件以string*為引數,按照他們指向的string進行排序。

class stringptrless :public binary_function < const

string*, const

string*, bool >

};int main()

結果如下:

0030a020

0030a0a0

0030a0e0

0030a060

antlem

penwom

請按任意鍵繼續. . .

void print(const

string *ps)

int main()

為包含指標的關聯容器指定比較型別

effective stl讀書筆記 今天看了一條,寫下來當做筆記,其實挺好理解的,也挺簡單的 我們知道,當我們建立乙個關聯容器時,比如set或者map,它會要求 我們指定乙個比較函式子類。如果我們不指定就會採用預設的比較函式子類,當然在某些情況下會產生錯誤。比如下面的 輸出的結果並不是我們想要的按字...

條目二十《為包含指標的關聯容器指定比較型別》

stl中的關聯容器是一種動態資料結構,其資料儲存方式是以記憶體節點方式的資料結構,具體來說一般是一種平衡二叉樹 紅黑樹 在向關聯容器插入元素的時候,容器內部為了保持樹的平衡性,會自動 插入函式有自我調整 的調整當前插入元素的儲存位置,達到動態平衡的目的。所以在關聯容器儲存的是指標的時候,如果是採用預...

為指標的關聯容器指定比較型別

假定有乙個string 指標的set,你把一些動物的名字插入set setssp ssp.insert new string anteater ssp.insert new string wombat ssp.insert new string lemur ssp.insert new string...