为什么在动态创建的对象数组上重载运算符<进行排序不起作用?

时间:2019-11-11 16:06:57

标签: c++ arrays sorting struct operator-overloading

我在玩c ++,发现发生了一件非常奇怪的事情:

  • 我创建了一个具有值和索引的自定义结构。
  • 我在自定义结构中实现了重载运算符'<'。
  • 我使用创建的自定义结构创建了一个向量。
  • 我对创建的向量进行了sort()。

这是奇怪的事情。当我静态创建自定义类的向量时,它会很好地排序。但是,当我创建动态创建的结构的向量时,它的排序效果不佳。 (对不起,我的英语糟透了)。我认为如果只显示代码会更容易。

这是我的代码:

CustomStruct结构:

struct CustomStruct{

    int value;
    int index;

    bool operator<(const CustomStruct &rhs){
        return value<rhs.value;
    }

    CustomStruct(int index, int value){
        this->index = index;
        this->value = value;
    }
};

我创建了2个自定义结构,添加了虚拟值并对它们进行如下排序:

vector<CustomStruct> firstStruct;
vector<CustomStruct*> secondStruct;

vector<int> arr = {5,1,4,2,3};

for(int i=0; i<5; i++){
    firstStruct.push_back(CustomStruct(i, arr.at(i)));
    secondStruct.push_back(new CustomStruct(i, arr.at(i)));
}

sort(firstStruct.begin(), firstStruct.end());
sort(secondStruct.begin(), secondStruct.end());

当我通过以下方式打印它们时:

cout << "First Struct: ";
for(int i=0; i<5; i++){
    cout << firstStruct.at(i).value << " ";
}
cout << endl;

cout << "Second Struct: ";
for(int i=0; i<5; i++){ 
    cout << secondStruct.at(i)->value << " ";
}
cout << endl;

我的输出是:

First Struct: 1 2 3 4 5
Second Struct: 1 5 4 2 3

所以为什么当我动态创建带有对象的向量时

vector<CustomStruct*> secondStruct;

它对它们的排序不正确吗?

非常感谢您!

0 个答案:

没有答案