Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中对CTypedPtrList进行排序+;还是MFc?_C++_Mfc_Visual C++ - Fatal编程技术网

C++ 如何在C+中对CTypedPtrList进行排序+;还是MFc?

C++ 如何在C+中对CTypedPtrList进行排序+;还是MFc?,c++,mfc,visual-c++,C++,Mfc,Visual C++,我需要一些模板类,如sort等,用于对CTypedPtrList进行排序。此示例将对Ctypedptrray进行排序: typedef CTypedPtrArray<CPtrArray , CLog *> CLogData; CLogData tLogData; CLog *t1Log , * t2Log; bool bChanged = true; if (tLogData.IsEmpty()) return; long int i, j

我需要一些模板类,如sort等,用于对CTypedPtrList进行排序。

此示例将对Ctypedptrray进行排序:

    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 );

        }
    }
}
typedef ctypedptraray CLogData;
CLogData tLogData;
阻塞*t1Log,*t2Log;
bool bChanged=true;
if(tLogData.IsEmpty())
返回;
长整数i,j;
对于(i=0;iGetThreadName(),t2Log->GetThreadName())>0)
{
tLogData.SetAt(i,t2Log);
tLogData.SetAt(j,t1Log);
}
}
}

此示例将对cTypedTrarray进行排序:

    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 );

        }
    }
}
typedef ctypedptraray CLogData;
CLogData tLogData;
阻塞*t1Log,*t2Log;
bool bChanged=true;
if(tLogData.IsEmpty())
返回;
长整数i,j;
对于(i=0;iGetThreadName(),t2Log->GetThreadName())>0)
{
tLogData.SetAt(i,t2Log);
tLogData.SetAt(j,t1Log);
}
}
}

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; 
typedef CTypedPtrList ObjectList;
//使用CMyObject的“顺序”属性对对象列表进行排序
ObjectList*oldList=对象;
对象=新对象列表();
对于(POSITION pos1=oldList->GetHeadPosition();pos1!=NULL;)
{
CMyObject*obj1=oldList->GetNext(pos1);
POSITION pos2=Objects->GetHeadPosition();
bool-inserted=false;
while(pos2!=NULL)
{
位置currentPos=pos2;
CMyObject*obj2=Objects->GetNext(pos2);
如果(obj1->GetOrder()GetOrder())
{
对象->插入之前(currentPos,obj1);
pos2=NULL;
插入=真;
}
}
如果(!inserted)Objects->AddTail(obj1);
}
删除旧名单;

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; 
typedef CTypedPtrList ObjectList;
//使用CMyObject的“顺序”属性对对象列表进行排序
ObjectList*oldList=对象;
对象=新对象列表();
对于(POSITION pos1=oldList->GetHeadPosition();pos1!=NULL;)
{
CMyObject*obj1=oldList->GetNext(pos1);
POSITION pos2=Objects->GetHeadPosition();
bool-inserted=false;
while(pos2!=NULL)
{
位置currentPos=pos2;
CMyObject*obj2=Objects->GetNext(pos2);
如果(obj1->GetOrder()GetOrder())
{
对象->插入之前(currentPos,obj1);
pos2=NULL;
插入=真;
}
}
如果(!inserted)Objects->AddTail(obj1);
}
删除旧名单;

您没有告诉我们要排序的内容、指针或指向的数据。您没有告诉我们要排序的内容、指针或指向的数据。