【发布时间】:2014-08-07 06:47:24
【问题描述】:
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 内的数据包通常是升序排列的。我正在插入排序值但删除任何随机数。有时这个集合是未排序的。不明白为什么会这样。是算子重载的问题吗?
【问题讨论】:
-
请发布重现问题的最小代码示例。请注意,您不需要包含运算符
>或==。 -
我为什么不需要它们?
-
std::set<Buffer>正常运行不需要它们。另请注意,您实现<和>运算符的方式非常令人困惑!为什么要将 RHS 放在 LHS 上? -
是的,这是正确的(尽管您也可以使用自定义比较器实例化
set模板。) -
此示例在运行时是否会产生所描述的问题?
data与所描述的问题有何关系?您的代码中有const_casts 吗?涉及Buffer或指向相同的指针的C 风格转换怎么样?您是否修改了set中的Buffers 而在set中?集合是如何填充的?
标签: c++ sorting set operator-overloading structure