gpt4 book ai didi

c++11 - 带有映射的结构的 ostream 运算符重载

转载 作者:行者123 更新时间:2023-12-05 03:13:03 25 4
gpt4 key购买 nike

我为学生创建了一个成绩结构,并试图重载“<<”运算符。

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

我怀疑这与没有正确的 map 语法的重载有关,如下所示。

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

有没有一种方法可以通过一个重载生成示例输出,或者我是否需要两种当前实现:一种用于 map:grades.scores,另一种用于字符串:grades.id

感谢您的帮助。

最佳答案

您无法自己解决问题似乎很奇怪,因为如果我正确理解了这个问题,您只需要将两个重载合并为一个,这样您就可以像这样从 map 迭代 const Grades g:

#include <iostream>
#include <map>
#include <string>

using namespace std;

struct Grades {
string id; // student ID, e.g,, a12345678
map<string, int> scores; // course, score, e.g. COMP3512, 86
};


ostream& operator<<(ostream& os, const Grades g) {
os << g.id << endl << g.scores.size() << endl;
for (auto it = g.scores.begin(); it != g.scores.end(); ++it)
os << (*it).first << ' ' << (*it).second << endl;
return os;
}

int main(int argc, char** argv)
{
Grades g;
g.id = "a12345678";
g.scores["COMP3512"] = 87;
g.scores["COMP3760 "] = 68;
cout << g;
return 0;
}

关于c++11 - 带有映射的结构的 ostream 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31310647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com