C++ 具有多个成员的排序结构c++;
我想对一类“歌曲”数据类型进行排序C++ 具有多个成员的排序结构c++;,c++,class,sorting,structure,C++,Class,Sorting,Structure,我想对一类“歌曲”数据类型进行排序 class song{ std::string artist; std::string title; std::string size; public: }; 我知道可以使用bool操作符重载>,但如果我想让它按艺术家、标题、大小排序,有没有办法指定比较顺序?当您创建操作符时,您想重载操作符 bool operator<(const song& x, const song& y) { if (x.artist
class song{
std::string artist;
std::string title;
std::string size;
public:
};
我知道可以使用bool操作符重载>,但如果我想让它按艺术家、标题、大小排序,有没有办法指定比较顺序?当您创建
操作符时,您想重载操作符
bool operator<(const song& x, const song& y)
{
if (x.artist < y.artist)
return true;
if (x.artist > y.artist)
return false;
if (x.title < y.title)
return true;
if (x.title > y.title)
return false;
if (x.size < y.size)
return true;
if (x.size > y.size)
return false;
return false;
}
bool操作符y.artist)
返回false;
如果(x.titley.title)
返回false;
如果(x尺寸y尺寸)
返回false;
返回false;
}
这方面有很多变化,但这对我来说是可行的。有两种解决方案,要么你有某种全局变量[或类似的]可以在操作符>
函数中访问,要么你使用带有“compare function”参数的sort
第二种解决方案如下所示:
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与lambda一起使用
std::sort(songs.begin(), songs.end(),
[](const Song& s1, const Song& s2)
{
// any comparison code you want.
return result;
});
由于您将实现的重载是,您可以在操作符中指定它谢谢,是的,我不允许使用boost,不幸的是,因为它是用于学校的,但是c++11应该可以,只要我指定。你知道如果我安装了c++11库和编译器,我会如何在linux上检查吗?实际上,有效的变体很少。这种比较器必须遵守严格的弱序原则。幸运的是,据我所知,你的是。
std::sort(songs.begin(), songs.end(),
[](const Song& s1, const Song& s2)
{
// any comparison code you want.
return result;
});