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

时间:2014-06-17 09:51:57

标签: c++ sorting set operator-overloading structure

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

1 个答案:

答案 0 :(得分:0)

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

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

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