「曲」データ型のクラスをソートしたい
class song{
std::string artist;
std::string title;
std::string size;
public:
};
bool 演算子を使用してオーバーロードできることは理解しています > が、アーティスト順、タイトル順、サイズ順にソートしたい場合、比較順序を指定する方法はありますか?
operator>
関数でアクセスできるある種のグローバル変数 [または類似の] を使用sort
するか、「比較関数」引数を使用して使用するかの 2 つの解決策があります。
2 番目のソリューションは次のようになります。
class song
{
....
static compareArtist(const song &a, const song &b)
{
return a.artist > b.artist;
}
static compareTitle(const song &a, const song &b)
{
return a.title > b.title;
}
...
}
if (sortby == artist)
sort(songs.begin(), songs.end(), song::compareArtist);
else if (sortby == title)
sort(songs.begin(), songs.end(), song::compareTitle);
複数の属性に基づく一定の順序付けが必要だと誰もが想定しているようです。「then」を異なる時間に異なる属性でソートしたいと解釈する代わりに、その答えは次のとおりです。
ラムダで std::sort を使用できます。
std::sort(songs.begin(), songs.end(),
[](const Song& s1, const Song& s2)
{
// any comparison code you want.
return result;
});