Я новичок в C ++ и пытаюсь отсортировать вектор на основе значений в другом векторе.Я пытаюсь реализовать это путем создания вектора структур и сортировки вектора структур с использованием STL.Структуры имеют 2 элемента данных, один - CustomType, а другой - int.Я хочу, чтобы это сортировалось в порядке убывания поля int и поэтому включило перегрузку булевого оператора, чтобы можно было использовать сортировку STL (алгоритм).
Структура создается в функции с использованием ссылок на CustomTypeвектор и изначально неинициализированный int-вектор, и объединение их в вектор структур.Значения для ints получаются путем вызова отдельной функции-члена SomeClass (SomeFunc) для каждого элемента вектора CustomType и другого параметра u_int8_t (эта функция работает сама по себе).
В конце я хочузаменить отсортированные объекты CustomType на основе отсортированной последовательности структуры.
Файл реализации (.cpp) имеет следующую функцию:
void SomeClass::orderFunc(std::vector<CustomType>& x, std::vector<int>& y, u_int8_t param){
std::vector<CustomStruct> xy_vec;
y.assign(x.size(), 0);
int count = int(x.size());
for(int i=0; i != count; ++i){
y[i] = SomeFunc(x[i], param);
}
for(int i = 0; i != count; ++i){
xy_vec[i].var1 = x[i];
xy_vec[i].var2 = y[i];
}
std::sort(xy_vec.begin(), xy_vec.end());
for(int i = 0; i != count; ++i){
x[i] = xy_vec[i].var2;
}
}
Структура определяется в заголовочном файле SomeClass какниже:
struct CustomStruct{
CustomType var1;
int var2;
bool operator>(const CustomStruct& a) const{
return (this->var2 > a.var2);
}
};
Когда эта функция вызывается, я получаю следующую ошибку:
недопустимые операнды для двоичного выражения
оператор bool () (const _T1 &__x, const _T1 & __y) const {return __x <__y;} </p>
Я не могу понять, почему перегрузка оператора bool недопустима, учитывая, что это определяется для поля int структуры.
Чего мне не хватает?Любая помощь будет оценена.Кроме того, любые предложения для более элегантного способа сделать это были бы также хороши.