#c #vector
#c #вектор
Вопрос:
Я новый программист на C , и я столкнулся с проблемой:
У меня есть этот класс:
class car{
public:
//Default Constructor
car();
//Overload Constructor
car(string, int, float, float);
//Desctructor
~car();
//Access Functions
string getbrand() const;
int getyear() const;
float getkm() const;
float getprice() const;
//Mutator Functions
void setbrand(string);
void setyear(int);
void setkm(float);
void setprice(float);
private:
//variables
string newbrand;
int newyear;
float newkm;
float newprice;
};
// Функции доступа
string car::getbrand() const{
return newbrand;
}
int car::getyear() const{
return newyear;
}
float car::getkm() const{
return newkm;
}
float car::getprice() const{
return newprice;
}
Итак, как только я начал вставлять свои машины, я поместил их в вектор:
void fillvector(vector<car>amp; newmyfleet){
string brand;
int year;
float km;
float price;
cout << "How many cars do you want in your fleet? ";
int fleetsize;
cin >> fleetsize;
for (int i = 0; i < fleetsize; i ){
cout << "Car Brand: ";
cin >> brand;
cout << "Car Year: ";
cin >> year;
cout << "Car Kms: ";
cin >> km;
cout << "Car Price: ";
cin >> price;
car newcar(brand, year, km, price);
newmyfleet.push_back(newcar);
cout << endl;
}
cout << endl;
}
Итак, мой вопрос заключается в следующем: Как я могу отсортировать все свои автомобили из вектора по маркам ?!!
Я пытался использовать сортировку, но не могу…
Это было мое последнее решение:
// функция 1
bool sortbybrand(car amp;c1, car amp;c2) { return c1.getbrand() < c2.getbrand(); }
//сортировка
void sbrand(const vector<car>amp; newmyfleet){
unsigned int size = newmyfleet.size(); //Number of cars
sort(newmyfleet.begin(), newmyfleet.end(), sortbybrand);
cout << "Sorting Cars by Brandnn " << endl;
for (unsigned int i = 0; i < size; i ){
cout << "Car: " << i 1 << endl;
cout << "Car Brand: " << newmyfleet[i].getbrand() << endl;
cout << "Car Year: " << newmyfleet[i].getyear() << endl;
cout << "Car Kms: " << newmyfleet[i].getkm() << endl;
cout << "Car Price: " << newmyfleet[i].getprice() << endl;
cout << endl;
}
}
Комментарии:
1.
const vector<car>amp; newmyfleet
Не будет хорошо предоставлять набор итераторов, которые можно использовать для изменения вектора. Потерятьconst
. Пока вы этим занимаетесь, добавьтеconst
к обоим параметрам вашего компаратора, и пусть вашаgetbrand()
функция вернет aconst std::stringamp;
, если вы не планируете получать его результаты при каждом участии в назначении перемещения.2. погуглите
std::qsort()
илиstd::sort()
примеры, их много и они тщательные. В любом случае, вы также должны предоставить функцию сравнения для пользовательских результатов