繁体   English   中英

重载<<以输出地图的key_type和Mapd_type

[英]Overloading << to output both key_type and mapped_type for a map

我有一个课程目录的类,该课程目录的类型为map<string, string> Courses 我想重载<<作为朋友运算符,以便当我输出例如Courses["TMA4100"] ,它将输出"TMA4100"和课程名称,而不仅是名称。 原因是我可以将目录存储在文件中,而不必在关闭程序时删除目录。

我对地图不是很熟悉,所以我真的不知道如何重载操作员来处理地图。 这是我最初的尝试:

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

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

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

例:

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

关于入门访问的建议:

为了增加灵活性,请创建一个包含课程信息并存储这些信息而不是字符串的类:

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

您可以编写(使用您的类的虚拟接口):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM