Перегрузка оператора для структуры

Я не могу заставить этот код работать. Я прочитал похожие вопросы по этой теме, но не смог найти решение. ошибка: нет совпадения с оператором<(типы операндов 'car' и 'const int') {return * __ it <__val; } Это был единственный значимый намек в длинном сообщении об ошибке.

struct car{
string name;
int l,h;
int operator<(/*const car& a,*/const car& b){
    return (this->l)<=(b.l);
};
int main(){int t;
cin>>t;
while(t--){
int n;
cin>>n;
 vector<struct car> a(n);
int i=0;
while(i<n){
    ws(cin);cin>>a[i].name>>a[i].l>>a[i++].h;
}
sort(a.begin(),a.end());
//more code }

Даже создание функции сравнения с двумя аргументами не сработало. Любая помощь будет оценена. Благодарю.

1 ответ

Решение

В вашем вопросе отсутствует актуальный вопрос, но две вещи очевидны:

1) Вы нарушаете строгий слабый порядок - если a < b затем b < a не может быть правдой. Ваша функция сравнения нарушает это. На самом деле, вы реализуете operator< с точки зрения operator<=, который должен быть красным флагом.

2) ваш код может использовать небольшое форматирование. Для этого используйте clang-формат или функцию форматирования вашей IDE (или веб-интерфейс для clang-format: link).

Другие вопросы по тегам