那我该怎么做呢?我尝试使用友元函数,重载运算符,但似乎无法完成它。
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]);
}
我有这个矢量,我尝试排序。我想这样做没有分类,因为我不认为我为这种方法正确地声明了向量。
答案 0 :(得分:0)
如果您不想使用任何内置排序功能,则必须手动实施。
// 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))
的其他算法,例如合并排序,快速排序等,以使其更快。
答案 1 :(得分:0)
这是对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]);
}
}
}