gpt4 book ai didi

c++ - std::set 的运算符重载无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:08 24 4
gpt4 key购买 nike

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 中的数据包通常按升序排列。我正在插入排序值但删除任何随机数。有时这个集合是未排序的。不明白为什么会这样。是不是运算符重载的问题?

最佳答案

这里最大的问题是你的 operator<是错的。您正在降序而不是升序排序,因此所有其他代码都无法正常工作。所以首先你需要修复 operator<return sequenceNumber < rhs.sequenceNumber; .

接下来您需要决定您的函数是删除小于请求的元素(来自注释)还是小于/等于(实际代码)。

然后你可以使用lower_bound来获得奖励积分找到迭代器的结束元素,而不是获取 begin并一遍又一遍地删除它。

关于c++ - std::set 的运算符重载无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24260713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com