A:
- Folosind functia std::sort din STL.
ExempluUnde functia de coparare pasata lui std::sort are forma:Code: Select all
#include <algorithm> // ... CStringArray arr; arr.Add(_T("costel")); arr.Add(_T("Ana")); arr.Add(_T("Gigel")); arr.Add(_T("Zoe")); arr.Add(_T("gigel")); arr.Add(_T("Costel")); arr.Add(_T("zoe")); arr.Add(_T("ana")); // sort descending, case sensitive std::sort(arr.GetData(), arr.GetData() + arr.GetSize(), StlCompareCStringDesc);
Exemplul de mai sus, face o sortare descrescatoare, case sensitive (face distinctie intre litere mari si mici).Code: Select all
bool StlCompareCStringDesc(const CString& left, const CString& right) { return left > right; }
Dupa sortare, array-ul arata asa: - Folosind functia qsort din biblioteca C standard.
ExempluDe data aceasta functia de comparare (pentru sortare crescatoare, non case sensitive) e de forma:Code: Select all
CStringArray arr; arr.Add(_T("costel")); arr.Add(_T("Ana")); arr.Add(_T("Gigel")); arr.Add(_T("Zoe")); arr.Add(_T("gigel")); arr.Add(_T("Costel")); arr.Add(_T("zoe")); arr.Add(_T("ana")); // sort ascending, non case sensitive qsort(arr.GetData(), arr.GetSize(), sizeof(CString*), CrtCompareCStringNoCaseAsc);
I fine, array-ul sortat arata acum asa:Code: Select all
int CrtCompareCStringNoCaseAsc(const void* left, const void* right) { return ((CString*)left)->CompareNoCase(*((CString*)right)); }
- Pentru simplitate, am dat in exemplu functii de comparare globale. Pot fi la fel de bine functii membre statice sau sau, in cazul lui std::sort, functori sau expresii lambda (C++11).
- Pana la a decide necesitatea sortarii unui sir intr-un container, trebuie de vazut daca este neaparata nevoie. De exemplu, controlul Windows lisview (SysListView32), implementat in MFC cu clasa CListCtrl, are functie de sortare built-in (vezi CListCtrl::SortItems).
- Acelasi principiu se aplica la toate tipurile de array-uri MFC: CArray, CStringArray, CTypedPtrArray, CObArray, CByteArray, CDWordArray, CPtrArray, CWordArray si CUIntArray.
- Cum se afiseza elementele unui aray MFC in fereastra watch, se arata in articolul precedent (vezi link-ul de mai jos).
- MSDN: Collections
- MSDN: qsort
- MSDN: std::sort
- [MFC] Cum vizualizez continutul containerelor MFC
<< Back to MFC index