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

时间:2018-02-14 22:47:10

标签: 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;
};

快速排序方法:

// 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)

任何帮助都会受到赞赏,因为我尝试了很多东西而且我已经查了一下,但在这种情况下无法获得其他建议。如果可能的话,我会理解为什么我也会得到这个错误。谢谢!

2 个答案:

答案 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运算符。