2017-08-30 66 views
0

我將CTypedPtrList轉換爲指向對象的指針的CArray。如何使用qsort對CTypedPtrList進行排序?

爲此我添加了下面的代碼。

typedef CTypedPtrList<CPtrList, CMyList*> CTagInfoList; 

CMyInfoList* myList; 

CArray<CMyList* ,CMyList*> arr; 

,, 

,, 

POSITION pos = myList->GetHeadPosition(); 
while(pos != NULL){ 

CMyList* pObj = (CMyList*)myList->GetNext(pos); 

arr.Add(pObj); 

} 

如何使用指向對象的指針CArray調用qsort。

+1

可能的複製[如何排序用戶定義類型的CArray?](https://stackoverflow.com/questions/244487/how-do-i-sort-a-carray-of-a-user-defined-type) –

+1

I '去過 用MFC進行二十年的編程。我幾乎從未使用過Microsoft容器。請考慮轉移到[C++標準庫](https://en.wikipedia.org/wiki/C%2B%2B_Standard_Library)。 – lakeweb

回答

0

你可以做這樣的事情:

qsort(static_cast<void*>(&arr[0]), arr.GetSize(), sizeof(CMyList*), CompareFunction); 

其中的compareFunction是一個靜態方法:

// header: 
static int CompareFunction(const void* a, const void* b); 
// cpp 

int CYourClass::CompareFunction(const void* a, const void* b) 
{ 
CMyList* pA = static_cast<CMyList*>(a); 
CMyList* pB = static_cast<CMyList*>(b); 
return pA->Compare(*pB); // Compare is a comparision CMyList* criteria 
} 

此外,你採取的qsort參考一下:的http://www.cplusplus.com/reference/cstdlib/qsort/

相關問題