Обекти във вектор, отпечатани, подредени по критерий
Опитвам се обекти във вектор, да ги отпечатам подредени по критерий, например коли отпечатани по години във възходящ ред.
Достигнах до по-долу показания код, което решава задачата, но поражда други проблеми.
Първо: Това разбърква оригиналния ред във вектора а това едва ли е много практично.
Второ: така написан кода не дава възможност за ново отпечатване подредени по друг критерий, например пробег.
Единственото, което ми идва наум е да направя втори вектор, копие на първия (с цел да запазя оригинала) и после след серия проверки да отпечатвам обект и да го трия от втория вектор.
Убеден съм, че има по-човешки начин за решаване на проблема. Ако ми дадете някакви насоки, ще съм ви признателен.
#include <algorithm>
#include <iostream>
#include <sstream>
#include <vector>
class Cars {
std::string brand;
int mileage;
int year;
public:
void set_brand(std::string cars_brand) { brand = cars_brand; }
std::string get_brand() { return brand; }
void set_mileage(int cars_mileage) { mileage = cars_mileage; }
int get_mileage() { return mileage; }
void set_year(int sets_year) { year = sets_year; }
int get_year() { return year; }
bool operator<(const Cars& other) const { return year < other.year; } //подрежда масива по години
};
void getInput(std::vector<Cars>& myVector) {
int num;
std::cin >> num;
std::cin.ignore();
std::string line;
int value = 0;
for (size_t i = 0; i < num; i++) {
Cars car;
std::cout << "Enter car brand: ";
getline(std::cin, line);
car.set_brand(line);
std::cout << "Enter car mileage: ";
getline(std::cin, line);
value = stoi(line);
car.set_mileage(value);
std::cout << "Enter year of manifacture: ";
getline(std::cin, line);
value = stoi(line);
car.set_year(value);
myVector.push_back(car);
}
}
void printCars(std::vector<Cars>& myVector) {
std::cout << std::endl;
for (auto i = myVector.begin(); i != myVector.end(); ++i) {
std::cout << i->get_brand() << '\t' << i->get_mileage() << '\t'
<< i->get_year() << std::endl;
}
}
int main() {
std::vector<Cars> myVector;
getInput(myVector);
std::sort(myVector.begin(), myVector.end());
printCars(myVector);
return 0;
}
Ето и примерен вход:
3
Fiat
4564500
1997
Renault
654412
1980
Audi
778700
1985