我不确定如何在struct Student中访问地图
我查到的一些例子说->第一->第二
但这无法编译。

如何访问结构内部的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;

    }

最佳答案

.->之间的主要区别是开始时具有的对象类型。当您拥有对象时,请使用.;当您拥有指向对象的指针时,请使用->

如果您这样定义学生

Student erik = ...

您将获得erik的ID,如下所示:

erik.id

如果您这样定义erik:

Student* erik = ...

你会得到他的身份证是这样的:

erik->id

这就是错误的意思

但是您还有另一个问题,因为firstsecond不是为地图定义的,而是为地图元素定义的。您需要遍历地图才能执行所需的操作。我猜这样会更好

os << g.id << '\n'
for (auto& it : g.scores) {
    os<< it.first << it.second << '\n' ;
}

关于c++ - 如何访问 map ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31044818/

10-11 00:48