繁体   English   中英

使用std :: sort()对自定义类的Vector进行排序会导致分段错误

[英]Sorting a Vector of a custom class with std::sort() causes a segmentation fault

我想使用std :: sort()对自定义类的向量进行排序,并重载<运算符。 按照这里的答案: 对自定义对象的向量进行排序 ,我尝试了以下代码:

class Evnt {
    private:
        int Day, Month;
        string mydata;
    public:
      friend ifstream& operator >>(ifstream &in,Evnt &E){                                                                                                                                                                                    

        char junk;                                                                                                                                                                                                                     
        in >>junk>>E.Month>>junk>>E.Day;                                                                                                                                                                                     

         getline(in,E.mydata);                                                                                                                                                                                                             

        return in;                                                                                                                                                                                                                         
    }            

     bool operator<(const Evnt &E) const{
           if(Month < E.Month)
                   return true;
           else if(Day < E.Day)
                   return true;
           return false;
     }
};

int main(){
     ifstream inpt("inputfile.txt")
     Vector <Evnt> v;

     Evnt tmpevnt;
     while(intp>>tmpevnt)
         v.push_back(tmpevent)

      sort(v.begin(), v.end());
      return 0;
}

最后一行有些不规律地导致分段错误。 我相当仔细地跟踪了各个示例,因此在弄清问题所在时也遇到了问题。 它似乎仅在我读入大量(〜20 +)项目时才会发生。

std::sort需要强加弱严格 std::sort的比较操作。

这意味着,如果a < b返回true ,则b < a 一定不能返回true

修正比较运算符。

 bool operator<(const Evnt &E) const{
       if(Month < E.Month)
               return true;
       else if(Month == E.Month && Day < E.Day)
               return true;
       return false;
 }

有关更多信息,请参见此类似问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM