Как отсортировать CTypedPtrList в C ++ или MFc? - PullRequest
0 голосов
/ 25 марта 2011

Я хочу, чтобы некоторые классы шаблонов, такие как sort и т. Д., Использовались для сортировки CTypedPtrList.

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

Этот пример будет сортировать CTypedPtrArray:

    typedef  CTypedPtrArray<CPtrArray , CLog *> CLogData;
    CLogData tLogData;
    CLog *t1Log , * t2Log;
    bool bChanged = true;
if (tLogData.IsEmpty()) 
    return;
long int i, j;
for (i = 0 ; i < m_nCount - 1  ; i++) 
{
    for( j = i + 1; j < m_nCount ; j++ )
    {
        t1Log = tLogData.GetAt( i);
        t2Log = tLogData.GetAt( j ) ;
        if (strcmp(t1Log->GetThreadName() , t2Log->GetThreadName()) > 0) 
        {
              tLogData.SetAt( i  , t2Log );
              tLogData.SetAt( j ,  t1Log );

        }
    }
}
0 голосов
/ 26 июня 2015

Решение karthik не будет работать для CTypedPtrList, так как CTypePtrList не поддерживает .GetAt () и .SetAt ();Вот решение с использованием списков указателей вместо массивов.

typedef CTypedPtrList<CPtrList, CMyObject*> ObjectList;

// sort object list using CMyObject's 'order' attribute
ObjectList* oldList = Objects;
Objects = new ObjectList();
for (POSITION pos1 = oldList->GetHeadPosition(); pos1 != NULL;)
{
    CMyObject *obj1 = oldList->GetNext(pos1);
    POSITION pos2 = Objects->GetHeadPosition();
    bool inserted = false;
    while (pos2 != NULL)
    {
        POSITION currentPos = pos2;
        CMyObject *obj2 = Objects->GetNext(pos2);
        if (obj1->GetOrder() < obj2->GetOrder())
        {
            Objects->InsertBefore(currentPos, obj1);
            pos2 = NULL;
            inserted = true;
        }
    }
    if (!inserted) Objects->AddTail(obj1);
}
delete oldList; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...