Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::sort()对自定义类的向量进行排序会导致分段错误_C++ - Fatal编程技术网

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

C++ 使用std::sort()对自定义类的向量进行排序会导致分段错误,c++,C++,我想使用std::sort()和重载>(ifstream&in,Evnt&E){ 煤焦垃圾; 在>>垃圾>>E.Month>>垃圾>>E.Day; getline(in,E.mydata); 返回; } bool操作员>tmpevnt) v、 推回(tmpevent) 排序(v.begin(),v.end()); 返回0; } 最后一行有点不规则地导致分段错误。我非常仔细地跟踪了各种示例,因此我在找出问题所在时遇到了一些问题。似乎只有当我在中读取了大量(~20+)项时,

我想使用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;
}
类Evnt{
私人:
整数天,月;
字符串mydata;
公众:
friend ifstream&operator>>(ifstream&in,Evnt&E){
煤焦垃圾;
在>>垃圾>>E.Month>>垃圾>>E.Day;
getline(in,E.mydata);
返回;
}            
bool操作员>tmpevnt)
v、 推回(tmpevent)
排序(v.begin(),v.end());
返回0;
}

最后一行有点不规则地导致分段错误。我非常仔细地跟踪了各种示例,因此我在找出问题所在时遇到了一些问题。似乎只有当我在中读取了大量(~20+)项时,才会发生这种情况。

std::sort需要一个强制执行的比较操作

这意味着如果
a
返回
true
b
不能返回
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;
 }

bool操作符
std::sort
需要一个比较操作,该操作将

这意味着如果
a
返回
true
b
不能返回
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;
 }

bool运算符要做的第一件事是将其放入调试器中,并找出其崩溃的位置。此处的
E.treest
?如果这只是垃圾数据,请为其创建一个局部变量。您的比较运算符无效。给定日期2009年3月和2002年12月,您的代码将声明两个日期都小于另一个日期。您没有检查单个的
操作符>
操作是否在
Evnt::operator>
内部工作。如果
Month>E.Month
您仍在比较它们的
日期。要做的第一件事是将其放入调试器中,并找出崩溃的位置。这是什么
E.这里有吗?如果这只是垃圾数据,请为其创建一个局部变量。您的比较运算符无效。给定日期
09年3月
02年12月
,您的代码将声明两个日期都小于另一个日期。您没有检查单个
操作员>
操作是否在
Evnt::operator>
内部工作。如果
月>E.Month
您仍在比较它们的