The following example shows you how to use this function to sort an MFC CArray class. Although the following example uses a CString array, you can easily customize for other MFC CArray-derived classes, such as CByteArray, CDWordArray, CObArray, CPtrArray, CUintArray, and CWordArray.
Steps to Implement Sorting
Derive your array data class from one of the CArray-derived classes. In our example, we use CStringArray as the base class for our class. The following is the declaration in the header file:
class CSortableStringArray : public CStringArray
{
public:
protected:
};
To the public section of your class add the following function:
void Sort(STRINGCOMPAREFN pfnCompare = Compare);
To the protected section of your class add the following static function:
Now add the following two type defs above the declaration of your class. These typedefs later help us in passing pointers of the two functions that we declared in steps 2 and 3 to the Visual C++ run-time's qsort function:
To use the array in your code, just declare it and call the Sort() function. The following example uses this array:
srand( (unsigned)time( NULL ) ); // Generate seed for rand().
CSortableStringArray arr;
CString str;
for (int i=0; i< 1000;i++)
{
str.Format("%6d", rand());// Get a random number string.
arr.Add(str);
TRACE("%s\n", (LPCTSTR)str);
}
long ltim=GetTickCount();
arr.Sort();
for (i=0; i< 1000;i++)
{
TRACE("%s\n", (LPCTSTR)arr[i]);
}
TRACE("Time took= %li\n", GetTickCount()-ltim);
NOTE: To implement a CArray type other than CString, just derive your class from the other array types and modify the Sort() and the Compare() functions accordingly.
NOTE: Quick Sort is a more efficient mechanism of sorting than the bubble sort used in the Microsoft Knowledge Base article, "How to Sort a CStringArray in MFC" (Q120961)
REFERENCES
For additional information about the bubble sort method, please see the following article in the Microsoft Knowledge Base: