0

だから私はこのような地図を持っています:

map<long, MusicEntry> Music_Map;

MusicEntry には (名前、アーティスト、サイズ、追加日) の文字列が含まれます

私の質問は、マップ内のすべてのデータを印刷するにはどうすればよいですか? 私はやってみました...

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

2番目の別名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 << ", " << ... << ")";
}

のプライベート(または保護された)データにアクセスするfriendには、おそらく上記の a を宣言する必要があります。MusicEntryMusicEntry

class MusicEntry
{
    // ...

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

もちろん、データが公開されている場合、または公開ゲッターを使用している場合、これは必要ありません。演算子のオーバーロードに関する FAQでさらに多くの情報を見つけることができます。

于 2013-11-03T20:24:36.990 に答える