structure p
{
int handle;//句柄
int id;//序列号
int count;//序列号的总数
}程序是一个网络程序,比如,有一个大的数据包,在发送的时候,可以把这个大的包分为2个小包,序号分别为1,2,count的值是小包的数量2,我的程序,收到了小包以后,先把小包暂时保存在一个容器里面,等到把包接受完毕(id=count),就将包组装起来,发给程序处理。现在有几个问题
1.接受小包的时候,可能并不是按照顺序接受的,有可能先收到2,再收到1,组装的时候要求按照顺序组装。
2.如何快速查找相同handle的包?并且快速按照顺序排列主要是基于效率的考虑,不知道现在又没有现成能使用的容器?
{
int handle;//句柄
int id;//序列号
int count;//序列号的总数
}程序是一个网络程序,比如,有一个大的数据包,在发送的时候,可以把这个大的包分为2个小包,序号分别为1,2,count的值是小包的数量2,我的程序,收到了小包以后,先把小包暂时保存在一个容器里面,等到把包接受完毕(id=count),就将包组装起来,发给程序处理。现在有几个问题
1.接受小包的时候,可能并不是按照顺序接受的,有可能先收到2,再收到1,组装的时候要求按照顺序组装。
2.如何快速查找相同handle的包?并且快速按照顺序排列主要是基于效率的考虑,不知道现在又没有现成能使用的容器?
CMapWordToPtr(index,&structure p )数据取完后CMapWordToPtr.GetCount();
for( int i = 0 ; i < nCount ; i ++ )
{
P = NULL;
IF( CMapWordToPtr.Lookup(i,&p) // 得到的P就是对应序号的
{
找到对应序号的包
}
}
你这种情况一般用hash_map吧。
而且本身結構體就是Handle到ID的, 直接來個硬轉換 pint64 pi64 = @Data.
然後pi64^的內容進行比較就知道有沒有重復了.既然你說是大數的數據, 直接建立一個
arpData [INT_MAX+INT_MAX]的數組
然後用個簡單的結點來組建成隊列, 隊列的頭就是 64位整型在數組中對應的位置就是了...
80行代碼都不用...
就類的聲明都去20行了...需要找來找去麼...
找到的map对象中存id->obj...
用MFC很方便,好多种map类供你存
存handle的那个可以用 CMapDwordToPtr