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

Я не могу заставить этот код работать. Я прочитал похожие вопросы по этой теме, но не смог найти решение.
ошибка: нет совпадения для оператора ‘<‘(типы операндов:’ car ‘и’ const int ‘)
{ верни это < __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 }

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

-4

Решение

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]