0

所以我有一张这样的地图:

map<long, MusicEntry> Music_Map;

MusicEntry 包含(名称、艺术家、大小和添加日期)的字符串

我的问题是如何打印,如何打印出地图中的所有数据?我试过做...

   for(auto it = Music_Map.cbegin(); it!= Music_Map.cend(); ++it)
    cout << it-> first << ", " <<  it-> second << "\n";

我认为问题正在发生,它无法编译和读取第二个又名 MusicEntry ..

4

2 回答 2

2

您需要提供一个std::ostream operator<< (std::ostream&, const MusicEntyr&)以便您可以做这种事情:

MusicEntry m;
std::cout << m << std::endl;

有了它,您可以打印地图的second字段。这是一个简化的示例:

struct MusicEntry
{
  std::string artist;
  std::string name;
};

std::ostream& operator<<(std::ostream& o, const MusicEntry& m)
{
  return o << m.artist << ", " << m.name;
}
于 2013-11-03T20:22:03.933 回答
2

您拥有的代码很好,但您需要实现

std::ostream& operator<<(ostream& os, const MusicEntry& e)
{
    return os << "(" << e.name << ", " << ... << ")";
}

并且您可能需要声明上述 a friendinMusicEntry以访问以下的私有(或受保护)数据MusicEntry

class MusicEntry
{
    // ...

    friend std::ostream& operator<<(ostream& os, const MusicEntry& e);
};

当然,如果数据是公开的或者您使用公共 getter,则不需要这样做。您可以在运算符重载常见问题解答中找到更多信息。

于 2013-11-03T20:24:36.990 回答