我有map<string, Day> Days
。Day
是课程:
class Day
{
public:
string date = "undefined";
int aims = 0;
vector <Task> tasks;
void Search();
friend ostream& operator<<(ostream& ost, const Day& d);
friend istream& operator>>(istream& ist, Day& d);
friend ifstream& operator>>(ifstream& in, Day& d);
friend ofstream& operator <<(ofstream& out, const Day& d);
};
如何保存此地图?
在使用地图之前,代码正在使用矢量来保存数据:
string name;
cout << "input file name ";
cin >> name;
ofstream Save(name);
if (!Save)continue; PrintForSaveDay(Save, d);
Save.close();
cout << "Saved,filename is :" << name << "\n"; break;
但现在我需要使用重载运算符而不是PrintForSaveDay函数。香港专业教育学院试图做到这一点,但它仍然无法正常工作...
cout << "Input file name ";
string name;
cin >> name;
ofstream Save(name);
if (!Save)
continue;
Day d;
Save << d;
Save.close();
也关于从文件读取:
cout << "Write name file name to read ";
string file_name;
cin >> file_name;
ofstream fout(file_name);
if (!fout)
continue;
for (auto& i : Days)
{
fout << i.second;
};
fout.close();
temp = true;
break;
我的操作员
ofstream& operator <<(ofstream& outfd, const Day& d)
{
outfd << d.date << endl << d.aims;
for (auto& t : d.tasks)
outfd << t;
return outfd;
}
ifstream& operator >>(ifstream& infd, Day& d)
{
Task t;
infd >> d.date >> d.aims;
for (int i = 0; i < d.aims; i++)
{
infd >> t;
d.tasks.push_back(t);
}
return infd;
}
任务描述
此项目是一天的日常计划。用户输入有关当天的目标数量和目标信息。应该能够获取,保留地图并保存/读取文件。如何使用此功能?
std::string Day::toString()
{
std::string output;
output += date;
output += std::to_string(aims);
for(std::vector::iterator it = tasks.begin(); it != tasks.end(); it++)
{
output += it->toString(); // Write a similar toString function for your
// Task class.
}
return output;
}
喜欢这样吗?string file_name;
cin >> file_name;
Day :: toString [file_name];
一种简单的解决方案是将std::string toString()
和void fromString(std::string)
方法添加到Day
类。您可以精确指定要存储的格式,并以相同的方式将其读回。例如,“字符串化的” Day
对象可能看起来像:
date,aims,task1,task2,task3,task4\n
[当您读回它时,请使用getline()
,将该行读入fromString()
,并用逗号分隔数据,直到读取\n
。自编写文件格式以来,您应该应该可以将其读回到Day
数据结构中。
使用Day.toString()
应产生易于写入文件的字符串。
toString()的示例:
std::string Day::toString()
{
std::string output;
output += date;
output += std::to_string(aims);
for(std::vector::iterator it = tasks.begin(); it != tasks.end(); it++)
{
output += it->toString(); // Write a similar toString function for your
// Task class.
}
return output;
}