C ++:打印出地图值

时间:2013-11-03 20:20:41

标签: c++ for-loop printing map

所以我有这样的地图:

map<long, MusicEntry> Music_Map;

MusicEntry包含(名称,艺术家,尺寸和添加日期)字符串

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

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

我认为问题在于它无法编译和读取第二个名为MusicEntry ..

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

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

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

您可能需要在friend中声明上述MusicEntry以访问MusicEntry的私有(或受保护)数据:

class MusicEntry
{
    // ...

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

当然,如果数据是公开的或者您使用公共getter,则不需要这样做。您可以在operator overloading FAQ

中找到更多信息