struct Buffer
{
const char* data;
u_int32_t size;
u_int32_t sequenceNumber;
bool operator < (const Buffer &rhs) const
{
return sequenceNumber > rhs.sequenceNumber;
}
};
std::set<Buffer>bufferData;
void RemoveElementsFromBuffer(u_int32_t _sequenceNumber)//remove data smaller than _sequenceNumber
{
Buffer _packetInformation;
set<Buffer >::iterator _iterator;
while(bufferData.begin() != bufferData.end())
{
_iterator = bufferData.begin();
_packetInformation = *_iterator;
if(_packetInformation.sequenceNumber > _sequenceNumber)
break;
bufferData.erase(_iterator);
delete [] _packetInformation.data;
}
}
bufferdata
内的数据包通常按升序排列。我正在插入排序值但删除任何随机数。有时这个集合是未分类的。不明白为什么会这样。这是运算符重载的问题吗?
答案 0 :(得分:0)
这里最大的问题是你的operator<
错了。您正在排序降序而不是升序,因此您的所有其他代码将无法正常工作。首先,您需要将operator<
修复为return sequenceNumber < rhs.sequenceNumber;
。
接下来,您需要确定您的函数是否删除小于请求的元素(来自注释)或小于/等于(实际代码)的元素。
然后,对于奖励积分,您可以使用lower_bound
找到迭代器的结束元素,而不是获取begin
并一遍又一遍地删除它。