2012-04-09 67 views
1

我试图插入一个地图的内容到另一个。下面是代码:为什么在插入地图时遇到seg错误?

std::map<std::string, int> Student::getGrades() const; 
... 

for(set<Student*, Cmp>::const_iterator it = s.begin(); it!=s.end(); ++it) 
{ 
    grades.clear(); 
    grades.insert((*it)->getGrades().begin(), (*it)->getGrades().end()); 
    for(map<string, int>::const_iterator itt = grades.begin(); itt!=grades.end(); ++itt) 
    { 
     if(itt->first == course && itt->second >= score1 && itt->second <= score2) 
      (*it)->display(cout); 
    } 
} 

s是一组包含指向学生对象和每个学生对象具有getGrades()方法返回的地图。我试图找到与我从文件中读入的成绩相匹配的成绩,并打印与这些成绩对应的记录。但是,插入方法给了我一个seg故障。有什么建议么?

+2

你可以显示'Student :: getGrades()'的声明吗? – alexisdm 2012-04-09 03:16:43

回答

3

如果getGrades()返回等级图的副本而不是参考,begin()end()将属于2个不同的地图。

你或许应该做一个本地副本,并简化了这样的代码:

for(set<Student*, Cmp>::const_iterator it = s.begin(); it!=s.end(); ++it) 
{ 
    map<string, int> grades = (*it)->getGrades(); 
    for(map<string, int>::const_iterator itt = grades.begin(); itt!=grades.end(); ++itt) 
    { 
     if(itt->first == course && itt->second >= score1 && itt->second <= score2) 
      (*it)->display(cout); 
    } 
} 
+0

修好了!非常感谢! – Strata 2012-04-09 03:53:28

0

有可能是在集合s一个未初始化的指针。

相关问题