我知道之前在类似的情况下已经问过这个问题,但是我是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;
};
快速排序方法:
// 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;
}
我收到错误“无效的操作数到二进制表达式('Person'和'Person)就行:
if(A[i] <= pivot)
任何帮助都会受到赞赏,因为我尝试了很多东西而且我已经查了一下,但在这种情况下无法获得其他建议。如果可能的话,我会理解为什么我也会得到这个错误。谢谢!
答案 0 :(得分:5)
C ++不会自动知道如何在类Person上进行比较。
如果您只想按年龄排序,请尝试
if(A[i].age <= pivot.age)
如果您想了解定义特殊运算符以便“Person&lt; = Person”自动运行,请查看cppreference.com:http://en.cppreference.com/w/cpp/language/operators
答案 1 :(得分:3)
你说你想按年龄排序,所以你需要比较他们的年龄:
if (A[i].age <= pivot.age)
您的代码出错,因为您尚未为<=
类定义Person
运算符。