我不确定如何访问struct Student中的地图 我查看的一些例子说 - >第一个 - >第二个 但这不会编译。
如何访问struct中的map? 或者操作员的超载是错误的?
错误说‘->’ has non-pointer type
struct Student{
string id;
map<string, double> scores;
};
ostream& operator<<(ostream& os, const Student& g){
return os << g.id << '\n' << g.scores->first << '\n' << g.scores->second ;
}
istream& operator >>(istream& is, Student& g){
return is >> g.id >> g.scores->first >> g.scores->second;
}
int main() {
vector<Student> g_vec;
Student grades;
while(cin >> gd)
g_vec.push_back(grades);
for (auto& g : g_vec)
cout << g << endl;
}
答案 0 :(得分:1)
.
和->
之间的主要区别在于您在开始时拥有的对象类型。当你有对象时使用.
,当有指向对象的指针时使用->
如果您以这种方式定义学生
Student erik = ...
你会得到这样的erik的身份:
erik.id
如果你这样定义erik:
Student* erik = ...
你会得到这样的身份:
erik->id
这就是错误的意思
但是您还有另一个问题,因为first
和second
没有为地图定义,而是为地图元素定义。你需要遍历地图才能做你想做的事。我猜这样的事情会更好
os << g.id << '\n'
for (auto& it : g.scores) {
os<< it.first << it.second << '\n' ;
}
答案 1 :(得分:0)
我还没有理解这个问题。如果你向我们展示样本输出,那就更精细了。 对不起,如果我错了,我无法找到你何时停止阅读数据。 。 ?
你需要使用pair来插入地图并遍历你应该使用迭代器。希望这会有所帮助:
ostream& operator<<(ostream& os, const Student& g){
//here you need to write for loop to traverse the entire map. I am printing only last ele. .
map<string,double>::const_iterator myit = g.scores.end();
os << g.id << '\n' << myit->first << '\n' << myit->second ;
return os;
}
istream& operator >>(istream& is, Student& g){
pair<string,double> mypair;
is >> g.id >> mypair.first >> mypair.second;
g.scores.insert(mypair);
return is;
}