c++ 如何排序对象的向量没有“排序”

wydwbb8l  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(125)

那我该怎么做呢我尝试了朋友函数,重载运算符,似乎无法完成。

class shop {
 int price;
 string name;
 string model;
 public:
    shop () {
        price =0;
        name = " NULL" ;
        model = " NULL " ;
    }

    shop ( string n , string m , int p ) {
        name = n;
        model = m;
        price = p;
    }

    void display () {
        cout<<"Name : " << name <<endl;
        cout<<"Model : "<<model<<endl;
        cout<<"Price : "<<price<<endl;
    }   
};

我该怎么按价格分类?

for ( int i = 1 ; i<=products ; i++) {
    cin.ignore();
    cout<<"Name  "<< i << ": ";
    getline(cin,n); 
    cout<<"Model   "<< i << ": ";
    cin>>m;
    cout<<"Price "<< i << ": ";
    cin>>p[i];

    e[i] =  new shop(n,m,p[i]);
}

我有一个向量,我试过排序。我不想做排序,因为我认为我没有正确地声明这个方法的向量。

3phpmpom

3phpmpom1#

如果你不想使用任何内置的排序函数,那么你必须手动实现它。

// You can use this bubble sort...

for ( int i = 1 ; i<=products ; i++) {    
    for(int j = 1; j <= (products-i+1); j++){ 
        if(e[i].price > e[j].price){
              swap(e[i], e[j]);
        }
    }
}

其复杂度为O(N^2)。当产品数量巨大时,需要花费大量的时间。你可以使用其他复杂度为O(Nlog(N))的算法,如合并排序,快速排序等。让它更快

unhi4e5o

unhi4e5o2#

这是一个使用2对向量进行排序的方法:

for (int i = 0; i < vec.size(); i++) {
    for (int j = i; j < (vec.size()); j++) {
        if (vec[i] > vec[j]) {
            std::swap(vec[i], vec[j]);
        }
    }
}

相关问题