二进制表达式人员和人员的操作数无效

Fal*_*0ut 2 c++ sorting

我知道之前在类似情况下已经问过这个问题,但是我是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

  • @ Fall0ut通常你在左侧不是指针时使用`.`而在左侧是指针时使用` - >`. (2认同)