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