声明:我在做一个网络数据抓取并且进行统计的程序,用carray将数据包存储并且进行降序排列,那位能针对以下程序进行修改,或者提出一种更好的方案也可以阿,谢谢啦做了如下的定义:
typedef struct _NewPackOrder
{
    int  arpNum;
int  parpNum;
int  tcpNum;
int  udpNum;
int  icmpNum;
int  totalNum;
CString  IP; 
} SinglePacket ;CArray <struct _NewPackOrder,struct _NewPackOrder >newpackOrder;
我想在添加元素时就根据totalNum对carray进行降序排列
于是我在添加新元素时,作了以下工作,
SinglePacket *singlepack=new SinglePacket;
int Num;
singlepack->IP=ether->GetMacSrcAddr();  
 if(ip->protocol==6)
{
singlepack->tcpNum=this->newpackOrder.GetAt(j).tcpNum+1;                        
 singlepack->udpNum=this->newpackOrder.GetAt(j).udpNum;
 singlepack->icmpNum=this->newpackOrder.GetAt(j).icmpNum;
singlepack->arpNum=this->newpackOrder.GetAt(j).arpNum;
singlepack->parpNum=this->newpackOrder.GetAt(j).parpNum;
singlepack->totalNum=singlepack->tcpNum+singlepack->udpNum+singlepack->icmpNum+singlepack->arpNum+singlepack->parpNum;
//   delete[] (SinglePacket  *)this->newpackOrder.GetAt(j); //这句话运行出错,所以删掉了;
 this->newpackOrder.RemoveAt(j,1);
 Num=newpackOrder.GetSize();
 for(int k=0;k<newpackOrder.GetSize();k++)
 {
 if(newpackOrder.GetAt(k).totalNum>singlepack->totalNum)
 Num=k+1;
 break;
 }
 this->newpackOrder.InsertAt(Num,*singlepack);
}
但是排序并没有成功,该怎么办呢

解决方案 »

  1.   

    降序的逻辑有问题
    if(newpackOrder.GetAt(k).totalNum>singlepack->totalNum) 
    应该倒过来
    if(newpackOrder.GetAt(k).totalNum<=singlepack->totalNum)
    另外,如果数组元素足够多(超过1000),这样的定位是不可取的,应该采用二分定位,因为数组本身有序
      

  2.   

    能不能加点注释啊?看了半天还不知道Num和一些变量是做什么的
      

  3.   

    CArray 最好不要使用CString ,
    否则会出现问题.
    对于这种排序可采用qsort,很快很简单.