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

2021-07-06 10:56:58 字數 1291 閱讀 4498

假定有乙個string*指標的set,你把一些動物的名字插入set:

setssp;

ssp.insert(new string("anteater"));

ssp.insert(new string("wombat"));

ssp.insert(new string("lemur"));

ssp.insert(new string("penguin"));

一、比較仿函式的實現

方法1:實現自己的比較仿函式類,它的物件帶有string*指標並按照指向的字串值來進行排序。就像這樣:

struct stringptrless : public binary_function

}typedef setstringptrset;

stringptrset ssp;

ssp.insert(new string("anteater"));

ssp.insert(new string("wombat"));

ssp.insert(new string("lemur"));

ssp.insert(new string("penguin"));

方法2:使用比較的仿函式模板

struct deferenceless 

};setssp; // 行為就像

// set...

二、列印函式的實現

方法1:使用for_each函式

void print(const string *ps)             

for_each(ssp.begin(), ssp.end(), print); // 在ssp中的每個元素上呼叫print

方法2:使用泛型的解引用仿函式類,用它和transfom與ostream_iterator連用

// 當本型別的仿函式被傳入乙個t*時,它們返回乙個const t&

struct deference

};transform(ssp.begin(), ssp.end(), // 通過解引用」轉換「

ostream_iterator(cout, "\n"), // ssp中的每個元素

deference()); // 把結果寫入cout

該方案也可應用於表現為指標的物件的容器,例如,智慧型指標和迭代器。

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

我寫下這樣的 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,它會要求 我們指定乙個比較函式子類。如果我們不指定就會採用預設的比較函式子類,當然在某些情況下會產生錯誤。比如下面的 輸出的結果並不是我們想要的按字...

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

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