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

标签 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),那么 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/

相关文章:

c++ - 通过隐式转换为字符串流式传输对象时重载解析失败

c++ - 运算符[][] C++

c# - 是否可以重载同名的 Func<T, TResult> 和 Func<T1, T2, TResult> ?

c++ - 请求从 'int' 到非标量类型 'Point"的转换

c++ - 如何构建静态库并将它们链接到 linux 平台中的 c++ 项目?

c++ - 从 std::map 访问时,Eclipse CDT 无法解析结构函数

C++ - 无法重载赋值运算符

基于泛型限制的Java方法重载

使用 bool 和 const char 的 C++ 函数重载会产生歧义而不发出警告 (MSVC2012)

c++ - 如何将颜色减少到指定的调色板