gpt4 book ai didi

c++ - 重载 << 以输出 map 的 key_type 和 mapped_type

转载 作者:行者123 更新时间:2023-11-27 22:52:44 28 4
gpt4 key购买 nike

我有一个类(class)目录类,它有一个 map<string, string> Courses 类型的私有(private)变量.我想重载<<作为 friend 运算符(operator),这样当我输出例如 Courses["TMA4100"] 时它会同时输出 "TMA4100"和类(class)的名称,而不仅仅是名称。原因是我可以将目录存储在文件中,而不是在关闭程序时删除目录。

我对 map 不是很熟悉,所以我真的不知道如何重载运算符来处理 map 。这是我最初的尝试:

std::ostream &operator << (std::ostream &outStream, const string coursecode){
outStream << coursecode << " " << Courses[coursecode];}

现在我已经考虑过了,这根本没有多大意义,因为我不会将字符串传递给运算符,而是传递带有键的映射。谁能指出我正确的方向?

最佳答案

要存储整个目录,请为您自己的类重载运算符,而不是为 map 或字符串重载。

例子:

std::ostream& operator<<(std::ostream& os, const YourClass& catalog)
{
for (const auto& entry: catalog.Courses)
{
os << entry.first << " " << entry.second << '\n';
}
return os;
}

关于入口访问的建议:

为了增加灵 active ,创建一个类来保存类(class)信息并存储这些信息而不是字符串:

struct CourseInfo
{
std::string name;
std::string description;
StaffMember teacher;
// ... more useful stuff ...
};

您的目录现在将是 std::map<string, CourseInfo> ,你可以重载 <<对于 CourseInfo :

std::ostream& operator<<(std::ostream& os, const CourseInfo& info)
{
os << info.name << " " << info.description << " " << info.teacher;
return os;
}

然后你可以写(为你的类使用一个虚构的接口(interface)):

YourClass catalog;
// ... populate the catalog
std::cout << catalog.courseInfo("TM4100") << std::endl;

关于c++ - 重载 << 以输出 map 的 key_type 和 mapped_type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936877/

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