我在玩c ++,发现发生了一件非常奇怪的事情:
这是奇怪的事情。当我静态创建自定义类的向量时,它会很好地排序。但是,当我创建动态创建的结构的向量时,它的排序效果不佳。 (对不起,我的英语糟透了)。我认为如果只显示代码会更容易。
这是我的代码:
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;
它对它们的排序不正确吗?
非常感谢您!