重载运算符时可以使用标志吗?

Can I use a flag when overloading an operator?

我有歌曲列表,其中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 工作,请首先注意 > 根本没有被使用(< 是),除非您明确地使用 [=16 这样的比较器=].然后你可以只提供一个自定义比较器:

std::sort(vec.begin(), vec.end(),
          [flag](const auto& a, const auto& b) { /* ... */ });