声明:我在做一个网络数据抓取并且进行统计的程序,用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);
}
但是排序并没有成功,该怎么办呢
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);
}
但是排序并没有成功,该怎么办呢
解决方案 »
- png格式的图片如何相加
- 怎么通过窗口句柄获得重绘消息
- vb结构转VC
- 关于Invalidate和UpdateWindow的一个问题!
- 如何在视图中点击菜单执行后再执行onpaint().谢谢
- 怎样在for循环中提交按键请求?(在win gui环境,所以不能用kbhit)
- 在用#import语句加入Ado15.dll编译时报错WINDOWS.H already included,什么原因 ,急,解决立马结账
- 有人做个DirectShow的USB视频捕捉,类微软Amcap程序?有个小问题,在线等待!
- 如何获得当前系统的正常状态和后台工作状态以及忙状态的鼠标的句柄?
- 有关编辑框问题
- 使用ADO的无奈错误
- 改变对话框上多个控件的默认显示,请高手帮忙,谢谢!
if(newpackOrder.GetAt(k).totalNum>singlepack->totalNum)
应该倒过来
if(newpackOrder.GetAt(k).totalNum<=singlepack->totalNum)
另外,如果数组元素足够多(超过1000),这样的定位是不可取的,应该采用二分定位,因为数组本身有序
否则会出现问题.
对于这种排序可采用qsort,很快很简单.