C++ 交换指向对象的指针向量以输出交换的对象

C++ 交换指向对象的指针向量以输出交换的对象,c++,pointers,vector,C++,Pointers,Vector,所以我应该使用冒泡排序来交换一个对象向量,使用指向该对象向量的每个元素的指针向量。我成功地对对象向量进行了排序,但我想交换指针向量以对对象向量进行排序(赋值的要求)。我尝试了下面的代码来交换指针 void BubSort(vector<List*> & vect, unsigned sortWay) { switch (sortWay) { case 2: if (vect[j]->GetI

所以我应该使用冒泡排序来交换一个对象向量,使用指向该对象向量的每个元素的指针向量。我成功地对对象向量进行了排序,但我想交换指针向量以对对象向量进行排序(赋值的要求)。我尝试了下面的代码来交换指针

void BubSort(vector<List*> & vect, unsigned sortWay) {
            switch (sortWay) {
            case 2:
                if (vect[j]->GetId() > vect[j + 1]->GetId()) {
                    BubSortMeth(vect[j], vect[j + 1]);
                } break;
            case 3:
                if (vect[j]->GetName() > vect[j + 1]->GetName()) {
                    BubSortMeth(vect[j], vect[j + 1]);
                } break;
            case 4:
                if (vect[j]->GetQuant() > vect[j + 1]->GetQuant()) {
                    BubSortMeth(vect[j], vect[j + 1]);
                } break;
            case 5: 
                if (vect[j]->GetPrice() > vect[j + 1]->GetPrice()) {
                    BubSortMeth(vect[j], vect[j + 1]);
                } break;
            }
        }
    }
};
void BubSortMeth(List *lhs, List *rhs) {
    List * temp = lhs;
    lhs = rhs;
    rhs = temp;
}
void BubSort(向量&vect,无符号排序){
道岔(索道){
案例2:
if(vect[j]->GetId()>vect[j+1]->GetId()){
BubSortMeth(vect[j],vect[j+1]);
}中断;
案例3:
if(vect[j]->GetName()>vect[j+1]->GetName()){
BubSortMeth(vect[j],vect[j+1]);
}中断;
案例4:
if(vect[j]->GetQuant()>vect[j+1]->GetQuant()){
BubSortMeth(vect[j],vect[j+1]);
}中断;
案例5:
如果(vect[j]->GetPrice()>vect[j+1]->GetPrice()){
BubSortMeth(vect[j],vect[j+1]);
}中断;
}
}
}
};
无效BubSortMeth(列表*lhs,列表*rhs){
列表*温度=lhs;
lhs=rhs;
rhs=温度;
}
我正在使用下面的代码创建对象向量和指向该向量中每个对象的指针向量

    while (fin >> tempVect) {           // input to temp List first then iterate through vector to set variables
        vectList.push_back(tempVect);
        vectList[i].SetId(tempVect.GetId());
        vectList[i].SetName(tempVect.GetName());
        vectList[i].SetQuant(tempVect.GetQuant());
        vectList[i].SetPrice(tempVect.GetPrice());
        if (vectList[i].GetPrice() < 0 || vectList[i].GetQuant() < 0) {
            vectList.erase(vectList.begin() + (i));
        }
        else {
            ++i;
        }
    }
    for (unsigned i = 0; i < vectList.size(); i++)
    {
        pointVectList.push_back(&vectList[i]);
    }
while(fin>>tempVect){//首先输入临时列表,然后遍历向量以设置变量
向量列表。推回(tempVect);
向量列表[i].SetId(tempVect.GetId());
向量列表[i].SetName(tempVect.GetName());
向量列表[i].SetQuant(tempVect.GetQuant());
向量列表[i].SetPrice(tempVect.GetPrice());
if(向量列表[i].GetPrice()<0 | |向量列表[i].GetQuant()<0){
擦除(vectList.begin()+(i));
}
否则{
++一,;
}
}
for(无符号i=0;i

输出显示对象的未排序向量。如果指针向量中的每个元素都指向对象指针相同索引中的相应元素,那么交换指针向量不应该交换对象向量吗?

您确实应该提供一个。如果你那样做了,你会明白的。此外,您通常使用简单
int
索引的向量,而不是指针。分配给您的任务比使用指针时更复杂。请将
BubSortMeth
的调用站点替换为
std::swap
BubSortMeth
实际上没有任何作用。交换指针向量不应该交换对象向量吗?--一个向量与另一个向量无关。您可以随意交换该指针向量——原始的
向量列表不受影响。如果要查看已排序列表,必须使用指针向量。是否对输出进行排序取决于打印方式(可能还取决于如何调用
BubSort
)。也许你可以把更多的注意力放在这些方面,而不是放在泡沫上?尝试一个更简单的例子,将两个元素硬编码到向量中。然后交换一个向量上的元素并输出结果。目前,您应该测试是否可以更改元素的顺序;它们最终是否排序是一个单独的问题(可能是下一个问题)。