Сортировка (вектор объектов)

#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() функция вернет a const std::stringamp; , если вы не планируете получать его результаты при каждом участии в назначении перемещения.

2. погуглите std::qsort() или std::sort() примеры, их много и они тщательные. В любом случае, вы также должны предоставить функцию сравнения для пользовательских результатов