简体   繁体   中英

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

I'd like to sort a vector of a custom class using std::sort() and overloading the < operator. Following the answer here: Sorting a vector of custom objects , I tried the following code:

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;
}

The last line somewhat erratically causes segmentation faults. I followed the various examples fairly closely, and so am having issues figuring out what the problem is. It seems to only occur if I read a large number (~20+) items in.

std::sort requires a comparison operation that imposes Strict Weak Ordering .

That means that if a < b returns true , b < a must not return true .

Fix your comparison operator.

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

See this similar question for more information.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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