【发布时间】:2015-09-27 10:11:48
【问题描述】:
我为学生创建了一个等级结构,并试图重载“
// Sample output:
a12345678
2 //number of elements in map
COMP3512 87
COMP3760 68
struct Grades {
string id; // student ID, e.g,, a12345678
map<string, int> scores; // course, score, e.g. COMP3512, 86
};
我之前已经重载operator<<独立获取信息。
ostream& operator<<(ostream& os, const Grades g) {
return os << g.id << '\n' ...
// return os << g.id << '\n' << g.scores; produces an error
}
我怀疑这与重载没有正确的映射语法有关,如下所示。
ostream& operator<<(ostream& os, const map<string, int>& s) {
for (auto it = s.begin(); it != s.end(); ++it)
os << (*it).first << ' ' << (*it).second << endl;
return os;
}
有没有办法通过一个重载产生示例输出,或者我需要两个当前的实现:一个用于地图:grades.scores,另一个用于字符串:grades.id
感谢您的帮助。
【问题讨论】:
-
这个问题还不清楚。将您显示的地图输出放入
Grades的<<运算符中几乎可以满足您的需求。>>不应该产生输出。你到底在问什么? -
@Angew 那是我的错,让我试着编辑一下。
标签: c++11 dictionary operator-overloading ostream istream