Я не могу заставить этот код работать. Я прочитал похожие вопросы по этой теме, но не смог найти решение.
ошибка: нет совпадения для оператора ‘<‘(типы операндов:’ 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 }
Даже создание функции сравнения с двумя аргументами не сработало.
Любая помощь будет оценена. Благодарю.
В вашем вопросе отсутствует актуальный вопрос, но две вещи очевидны:
1) Вы нарушаете строгий слабый порядок — если a < b
затем b < a
не может быть правдой. Ваша функция сравнения нарушает это. На самом деле, вы реализуете operator<
с точки зрения operator<=
, который должен быть красным флагом.
2) ваш код может использовать небольшое форматирование. Используйте для этого функцию clang-format или форматирования вашей IDE (или веб-интерфейс для clang-format: ссылка на сайт).
Других решений пока нет …