我正在尝试将一张地图的内容插入另一张地图。这是代码:
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);
}
}
是一个包含指向学生对象的指针的集合,每个学生对象都有一个返回地图的getGrades()方法。我正在尝试找到与我从文件中读到的成绩相匹配的成绩,并打印与这些成绩相对应的成绩。但是,插入方法给我一个seg错误。有什么建议吗?
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
集s
中可能有一个未初始化的指针。