C/C++

Помогите пожалуйста C++.

Дан массив в текстовом файле
Код Фамилия Имя Стаж Норма
1 Иванов Сергей 5 12,5
2 Петров Петр 6 13,5
3 Федоров Федор 4 13,2
4 Смирнов Алексей 5 14,1
Составить код в C++. "Для стажа заданного с клавиатуры, соответствующие им Фамилия отсортировать в алфавитном порядке" ...
Azat Allanazarow
Azat Allanazarow
1 094
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <iomanip>
using namespace std;
struct Person {
int id;
int seniority;
double norm;
string surname;
string name;
Person() : id(0), seniority(0), norm(0) {}
friend bool operator<(const Person& a, const Person& b) {
if (a.surname < b.surname) return true;
if (a.surname == b.surname) {
if (a.name < b.name) return true;
if (a.name == b.name) {
if (a.id < b.id) return true;
}
}
return false;
}
friend ostream& operator<<(ostream& out, const Person& p) {
out << right << setw(3) << p.id << ". "
<< left << setw(25) << p.surname + ' ' + p.name << ' '
<< right << setw(3) << p.seniority << ' '
<< setw(7) << p.norm;
return out;
}
};
class Persons {
public:
bool load(const string& path) {
ifstream db(path);
if (db.is_open()) {
string record;
while (getline(db, record)) {
istringstream iss(record);
Person p;
iss >> p.id >> p.surname >> p.name >> p.seniority >> p.norm;
box.emplace_back(p);
}
db.close();
return true;
}
return false;
}
vector<Person> seniority(const int seniority) {
vector<Person> acc;
for (auto& x : box) if (x.seniority == seniority) acc.push_back(x);
sort(acc.begin(), acc.end());
return acc;
}
private:
vector<Person> box;
};
int main() {
system("chcp 1251 > nul");
cout << "Путь к файлу: ";
string path;
getline(cin, path);
Persons persons;
if (persons.load(path)) {
cout << "Стаж: ";
int seniority;
cin >> seniority;
auto box = persons.seniority(seniority);
for (const auto& x : box) cout << x << '\n';
} else {
puts("Путь к файлу не найден!");
}
system("pause > nul");
}
Анатолий Сто
Анатолий Сто
98 122
Лучший ответ
Azat Allanazarow Спасибо
Azat Allanazarow кстати можно ваш email)
Есть std::sort(begin, end), который по дефолту умеет сортировать большинство (если не все) STLвские контейнеры и типы, в т. ч и какой-нибудь std::vector

если у вас имеется класс, в котором находится стока с именем - вам придётся для него написать свой компаратор и передавать его в sort в виде std::sort(begin, end, compare)

Общий алгоритм выглядит примерно так: вы добавляете в вектор строк/объектов свои данные, далее создаёте ещё один вектор с выборкой по стажу и уже этот вектор сортируете при помощи std::sort(). Выборку элементов можно производить как в ручную, так и при помощи того же std::find();