如何访问地图?

时间:2015-06-25 08:17:23

标签: c++ dictionary

我不确定如何访问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;

    }

2 个答案:

答案 0 :(得分:1)

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

如果您以这种方式定义学生

Student erik = ...

你会得到这样的erik的身份:

erik.id

如果你这样定义erik:

Student* erik = ...

你会得到这样的身份:

erik->id

这就是错误的意思

但是您还有另一个问题,因为firstsecond没有为地图定义,而是为地图元素定义。你需要遍历地图才能做你想做的事。我猜这样的事情会更好

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;
}