一、需求:
現(xiàn)在需要用一個(gè)容器存放若干對象的指針(AObject*),對象指針在容器中的順序按照對象某個(gè)屬性(pObject->GetValue();)從低到高排序。
二、"解決"方法:
1. 使用std::set
set中的元素是按照一定的順序的存放的(根據(jù)元素的大?。?。通過制定set的第二個(gè)模板參數(shù)就可以讓它按我們的要求順序排放。
先寫一個(gè)函數(shù)對象:















AObjectContainer setContainer;
這種方法有啥問題?
(見文后)
2. 使用std::list
list中的元素默認(rèn)不會排序,需要我們“手動”排序。
用list這樣聲明:

AObjectContainer listContainer;
添加完元素后,再排序:
(1)使用std::sort?
可注意了,std::list貌似不支持用std::sort進(jìn)行用戶自定義排序,反正我是沒有試成功(有興趣的同學(xué)可以解釋一下)。假如這樣寫是錯(cuò)誤的:

(2)使用list.sort()

三、分析
set中的元素是按序排列(此處是按object.GetValue()的大小排序,我們把這個(gè)值也叫key吧),注意的是set中不存在key值相等的元素。假如要插入的元素在set中已經(jīng)存在會發(fā)生什么呢?是用新的元素替換原來的元素還是保留原來的元素呢?(有興趣有時(shí)間的同學(xué)幫忙做個(gè)實(shí)驗(yàn)吧)但有一點(diǎn)可以肯定,有一個(gè)被遺失了。如果set中存放的是對象,還沒啥問題。但現(xiàn)在set中存放的是指針,于是內(nèi)存便泄漏了。