所以我有这样的地图:
map<long, MusicEntry> Music_Map;
MusicEntry包含(名称,艺术家,尺寸和添加日期)字符串
我的问题是如何打印,如何打印出地图中的所有数据?我试过......
for(auto it = Music_Map.cbegin(); it!= Music_Map.cend(); ++it)
cout << it-> first << ", " << it-> second << "\n";
我认为问题在于它无法编译和读取第二个名为MusicEntry ..
答案 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。
中找到更多信息