Как упорядочить записи в алфативтном порядке?
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
struct Sotrudnik
{
string surname;
string name;
int experience;
int age;
char gender;
};
int main()
{
const int n = 8;
Sotrudnik A[n];
int i;
setlocale(0, "rus");
for (i=0;i<n;i++)
{
cout <<"Фамилия сотрудника: "<<"\n";
cin >> A[i].surname;
cout <<"Имя сотрудника: "<<"\n";
cin >> A[i].name;
cout <<"Возраст сотрудника: "<<"\n";
cin >> A[i].age;
cout << "Стаж сотрудника: "<<"\n";
cin >> A[i].experience;
cout << "Пол сотрудника: "<<"\n";
cin >> A[i].gender;
}
string poisksurname;
cout << "Введите фамилию сотрудника для поиска: ";
cin >> poisksurname;
bool found = false;
for (int i = 0; i < n; ++i) {
if (A[i].surname == poisksurname)
{
cout << "Информация о сотруднике:" << endl;
cout << "Фамилия сотрудника: " << A[i].surname << endl;
cout << "Имя сотрудника: " << A[i].name << endl;
cout << "Возраст сотрудника: " << A[i].age << endl;
cout << "Стаж сотрудника: " << A[i].experience << endl;
cout << "Пол сотрудника: " << ((A[i].gender=='м')? "мужской":"женский") << endl;
found = true;
break;
}
}
if (!found) {
cout << "Сотрудник с фамилией " << poisksurname << " не найден." << endl;
}
system("pause");
return 0;
}```
Ответы (2 шт):
Автор решения: Deniska SosiSka
→ Ссылка
Используйте функцию sort, которая принимает три аргумента: указатель на начало массива, указатель на конец массива и лямбда-функцию, которая определяет критерий сортировки. В вашем случае может выглядеть так:
sort(A, A + n, [](const Sotrudnik& a, const Sotrudnik& b) {
return a.surname < b.surname;
});
Не забудьте подключить библиотеку #include <algorithm>
Автор решения: Swift - Friday Pie
→ Ссылка
Для начала, определи процедуру сравнения для типа Sotrudnik
. От того, какой версией языка можно пользоваться, реализация может варьироваться (есть оператор <=>
).
Можно определить и оператор:
struct Sotrudnik
{
string surname;
string name;
int experience;
int age;
char gender;
// Упорядочим сначала по фамилии, потом по имени
// <=> из С++20. std::tie из C++17
auto operator<=>(const Sotrudnik& other) const {
return std::tie(surname, name) <=> std::tie(other.surname, other.name);
}
};
Потом берется любой понравившийся подходящий алгоритм сортировки из.. откуда угодно, только вместо, там, чисел поставляются записи, сравниваемые новой процедурой.