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

时间:2019-09-22 00:37:25

标签: c++ operator-overloading overloading

我有歌曲列表,其中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),标记会在哪里?

1 个答案:

答案 0 :(得分:3)

不,您不能。 operator>是二进制运算符;它必须正好接受两个参数(如果存在,则包含*this)。该标志没有备用插槽。

如果您打算使std::sort工作,请首先注意一点,>根本不使用(<),除非您显式地将比较器设置为std::greater<>{}之类。 。然后,您可以提供一个自定义比较器:

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