我有歌曲列表,其中song是一个对象,songName和songArtist都是歌曲的属性;我需要根据名称或艺术家的字母顺序对它们进行排序,具体取决于用户;我想重载 >
运算符来这样做,但我想知道我是否可以添加一个标志来标识用户是否想根据歌曲名称或艺术家姓名对其进行排序。
bool Song::operator > (const Song& s, const bool& flag){
if(flag)
return songName> s.songName;
else
return songArtist> s.songArtist;
}
如果是这样,我该如何进行比较?我的意思是,如果我的评估类似于 if(song>s.song)
,那么 flag 会在哪里?
最佳答案
不,你不能。 operator>
是二元运算符;它必须正好有两个参数(包括 *this
如果存在的话)。旗帜没有空位。
如果您打算制作 std::sort
工作,首先要注意的是>
根本不使用( <
是),除非你明确地使用像 std::greater<>{}
这样的比较器.然后你可以只提供一个自定义比较器:
std::sort(vec.begin(), vec.end(),
[flag](const auto& a, const auto& b) { /* ... */ });
关于c++ - 重载运算符时可以使用标志吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045168/