将对象放入地图后打印对象

Printing an object after putting it into a map

本文关键字:对象 打印 地图      更新时间:2023-10-16
class Task
{

public:
string study;
int time;
bool made;
int priority;
}
class Day 
{
public:
string date = "undefined";
int aims = 0;
vector <Task> tasks;
}

我有 2 个类,我使用 Vector 来保存两者的数据。 这个项目是一天的日常计划。 现在我需要改进它以存储更多天数,导师希望我使用 MAP。

map<string, Day>Days;
map<string, Day>::iterator it;
Days.insert(pair<string, Day>(s, d));
for (it = Days.begin(); it != Days.end(); ++it)
{
cout << it->first << " " << it->second << 'n';
}

E0349 缺少与这些操作数对应的运算符"<<" C2679 二进制"<<":未找到接受类型为"_Ty2"的右操作数的运算符(或没有可接受的转换( 跟 [_Ty2 = 天] 我该怎么做?

void PrintDay(const Day& d, ChangeF Pd)
{
cout << "Current date:" << d.date << endl << "n=============================================" << endl << "Number of tasks:" << d.aims;
cout << "n=============================================" << endl;
for (int i = 0; i < d.aims; i++)
{
PrintTask(d.tasks[i], Pd);
}
}
Day InputDay()
{
setlocale(LC_ALL, "Russian");
Day d;
cout << "nEnter date dd ENTER mm ENTER yyyy ENTER obe by one" << endl;
int dd, mm, yyyy;
dd = DigitInputCheck(1, 30);
mm = DigitInputCheck(1, 12);
yyyy = DigitInputCheck(0, 4000);
ostringstream WriteDate;
WriteDate << dd << "." << mm << "." << yyyy << endl;
d.date = WriteDate.str();
cout << "Number of tasks:" << endl;
cin >> d.aims;
for (int i = 0; i < d.aims; i++)
{
d.tasks.push_back(InputTask());
}
return d;
}

如注释中所述,如果您要尝试将<<与类型Day一起使用,则需要重载operator<<。由于您已经有PrintDay,我将对其进行调整以与操作员一起使用。我不知道Pd应该是什么,所以我忽略了它。此函数应为全局函数。由于您的所有字段都是公共字段,因此也不需要通过friend进行特殊访问。

std::ostream &operator<<( std::ostream &os, const Day &day ) {
os << "Current date:" << d.date << 'n'
<< "n=============================================n"
<< "Number of tasks:" << d.aims
<< "n=============================================n";
for (int i = 0; i < d.aims; i++)
{
os << d.tasks[i];
}
}

您还需要为Task类型添加运算符。鉴于上述情况,您应该能够为您的PrintTask函数创建另一个函数。