Можно ли использовать флаг при перегрузке оператора? - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть список песен, где 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 Ответ

3 голосов
/ 22 сентября 2019

Нет, вы не можете.operator> - бинарный оператор;он должен принимать ровно два аргумента (включая *this, если имеется).Для флага нет запасного слота.

Если вы намерены заставить std::sort работать, сначала обратите внимание, что > вообще не используется (< есть), если вы явно не используете компараторкак std::greater<>{}.Тогда вы можете просто предоставить пользовательский компаратор:

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