Как отсортировать CStringArray в MFC
|
Ниже приведён код, который сортирует объект CStringArray. Функция main() конструирует объект CStringArray, добавляет в него элементы, распечатывает элементы, вызывает функцию-член sort() для сортировки, а затем распечатывает отсортированные элементы. Функция sort() использует алгоритм сортировки Пузырьком, а затем вызывает функцию CompareAndSwap() для сравнения каждой строки и меняет их местами если необходимо. Пример кода/* * Требуемые опции компилятора: /MT */
#include <afx.h> #include <iostream.h> #include <afxcoll.h>
class CSortStringArray : public CStringArray { public: void Sort(); private: BOOL CompareAndSwap(int pos); }; void CSortStringArray::Sort() { BOOL bNotDone = TRUE;
while (bNotDone) { bNotDone = FALSE; for(int pos = 0;pos < GetUpperBound();pos++) bNotDone |= CompareAndSwap(pos); } } BOOL CSortStringArray::CompareAndSwap(int pos) { CString temp; int posFirst = pos; int posNext = pos + 1;
if (GetAt(posFirst).CompareNoCase(GetAt(posNext)) > 0) { temp = GetAt(posFirst); SetAt(posFirst, GetAt(posNext)); SetAt(posNext, temp); return TRUE;
} return FALSE; } void main() { CSortStringArray sortArray;
sortArray.Add(CString("Zebra")); sortArray.Add(CString("Bat")); sortArray.Add(CString("Apple")); sortArray.Add(CString("Mango"));
for (int i = 0; i <= sortArray.GetUpperBound(); i++) cout << sortArray[i] << endl;
sortArray.Sort(); cout << endl;
for (int j = 0; j <= sortArray.GetUpperBound(); j++) cout << sortArray[j] << endl; } |