我知道之前在类似情况下已经问过这个问题,但是我是C++的新手,无法弄清楚需要做什么或者为什么要这样做.基本上我使用的是我创建的Person对象,它具有变量名称,年龄,高度和权重.我需要对我创建的Person对象运行快速排序,并按年龄对它们进行排序.
人员类:
class Person{
private:
string name;
int age, height, weight;
public:
Person(string name = "empty", int age = 0, int height = 0, int weight = 0)
{
this->name = name;
this->age = age;
this->height = height;
this->weight = weight;
};
Run Code Online (Sandbox Code Playgroud)
快速排序方法:
// Quick Sort
void QuickSort(Person *A, int start, int end){
if(start < end){
int p = partition(A, start, end);
QuickSort(A, start, p - 1);
QuickSort(A, p + 1, end);
}
}
int partition(Person *A, int start, int end){
Person pivot = A[end];
int p = start;
for(int i = start; i <= end - 1; i++){
if(A[i] <= pivot){
Person temp = A[i]; A[i] = A[p]; A[p] = temp;
p++;
}
}
Person temp = A[end]; A[end] = A[p]; A[p] = temp;
return p;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误"无效的操作数到二进制表达式('人'和'人)在行上:
if(A[i] <= pivot)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,因为我已经尝试了多个东西,我已经查找了,但在这种情况下无法获得其他建议.如果可能的话,我会理解为什么我也会得到这个错误.谢谢!
小智 5
C++不会自动知道如何在类Person上执行比较.
如果您只想按年龄排序,请尝试
if(A[i].age <= pivot.age)
Run Code Online (Sandbox Code Playgroud)
如果你想了解定义特殊运营商,使"人<=人"会自动工作,检查出cppreference.com:http://en.cppreference.com/w/cpp/language/operators