Есть вот такое только тут используется set,помогите переделать на unordered_map
Код:
Сделал удаление,но прошу помочь передалать на unordered_map:
[CPP]#include <iostream>
#include <set>
#include <string>
#include <cstdlib>
#include <clocale>
#include<unordered_map>
#include <conio.h>
using namespace std;
class Airplane
{
public:
Airplane() {} // конструктор по-умолчанию
// аргументированные конструкторы, используют список инициализации
Airplane(int flightnumber, const string &destination, const string &surname,string& departuredate) :
flightnumber_(flightnumber), destination_(destination), surname_(surname), departuredate_(departuredate){}
// для поиска по значению number
Airplane(int flightnumber) : flightnumber_(flightnumber) {}
// get-методы. модификатор const после функции указывает, что она не
// изменяет состояние класса (все свойства остаются теми же)
int getflightnumber() const { return flightnumber_; }
string getdestination() const { return destination_; }
string getsurname() const { return surname_; }
string getdeparturedate()const { return departuredate_; }
private:
int flightnumber_; // поля класса
string destination_;
string surname_;
string departuredate_;
};
// определяем оператор сравнения двух объектов класса. Необходимо для
// использования объектов в контейнере set (ключ сортировки будет number)
bool operator < (const Airplane &t1, const Airplane &t2)
{
return t1.getflightnumber() < t2.getflightnumber(); // если t1.number_ меньше, то истина
}
// перегружаем оператор вывода в поток, чтобы научить выводить объекты класса
ostream& operator << (ostream &out, const Airplane &t)
{
out << "Номер поезда: " << t.getflightnumber() << endl // формируем поток
<< "Станция назначения: " << t.getdestination() << endl
<< "Время прибытия: " << t.getsurname() << endl
<< "Желаемая дата вылета: " << t.getdeparturedate() << endl;
return out; // возвращаем ссылку на сформированный поток
}
int main()
{
setlocale(LC_ALL, ""); // настраиваем консоль на ввод/вывод русских символов
set<Airplane> tset; // Создаем set-контейнер объектов класса Train
char choise = '1'; // выбор в меню
while (choise != '0')
{
system("cls"); // очистка экрана
cout << "Что желаете сделать?\n"
<< "1. Добавить заявку в список\n"
<< "2. Вывести все заявки\n"
<< "3. Поиск заявок по заданному номеру рейса и дате вылета \n"
<< "4. Поиск заявок, упорядоченных по пунктам назначения\n"
<<"5.Поиск заявок, упорядоченных по датам вылета\n"
<< "6.Удаление всех заявок\n"
<< "0. Выход\n\n"
<< "Ваш выбор: ";
cin >> choise;
switch (choise)
{
case '1':
{// фигурные скобки чтобы переменные объявленные тут были локальными
int flightnumber;
string destination, surname, departuredate;
system("cls"); // очистка экрана
cout << "Введите номер рейса: ";
cin >> flightnumber;
cout << "Введите пункт назначения: ";
cin >> destination;
cout << "Введите фамилию и инициалы пассажира: ";
cin >> surname;
cout << "Введите желаемую дату вылета:(Например 21.05.2022) ";
cin >> departuredate;
// добавляем новый объект класса Train вызывая аргументированный
// конструктор и передавая ему параметры
tset.insert(Airplane(flightnumber, destination, surname, departuredate));
break;
}
case '2':
system("cls");
if (tset.empty()) // если контейнер пуст
{
cout << "БД пуста, добавьте для начала элементы";
_getch(); // пауза
break;
}
// пробегаемся по всему контейнеру от начала до конца
// it - итератор (грубо говоря указатель) на объект класса Train
for (set<Airplane>::iterator it = tset.begin();
it != tset.end(); ++it)
cout << *it << endl; // уже умеет выводить объект на экран
_getch(); // пауза
break;
case '3':
{
system("cls");
if (tset.empty()) // если контейнер пуст
{
cout << "БД пуста, добавьте для начала элементы";
_getch(); // пауза
break;
}
int flightnumber;
cout << "Введите номер рейса:";
cin >> flightnumber;
string departuredate;
cout << "Введите желаемую дату вылета:(Например 21.05.2022) ";
cin >> departuredate;
// метод контейнера find вернет итератор на искомый объект, если
// совпадений нет, то станет равным концу контейнера (set.end())
// Происходит поиск по уникальному ключу
set<Airplane>::iterator it = tset.find(flightnumber) ;
if (it == tset.end())
cout << "Нет сопадений";
else
if (it->getdeparturedate() == departuredate) // если совпадение
cout << *it << endl;
_getch(); // пауза
break;
}
case '4':
{
system("cls");
if (tset.empty()) // если контейнер пуст
{
cout << "БД пуста, добавьте для начала элементы";
_getch(); // пауза
break;
}
string destination;
cout << "Введите пункт назначения: ";
cin >> destination;
// поиск с помощью метода find не сработает, т.к. string station
// не является ключом контейнера (элементом, по которому идет
// сравнение при добавлении. Вдобавок, объектов со схожим полем
// может быть несколько, поэтому просто перебираем весь
// контейнер и при совпадении выводим на экран
for (set<Airplane>::iterator it = tset.begin();
it != tset.end(); ++it)
if (it->getdestination() == destination) // если совпадение
cout << *it << endl;
_getch(); // пауза
break;
}
case '5':
{
system("cls");
if (tset.empty()) // если контейнер пуст
{
cout << "БД пуста, добавьте для начала элементы";
_getch(); // пауза
break;
}
string departuredate;
cout << "Введите желаемую дату вылета:(Например 21.05.2022) ";
cin >> departuredate;
// поиск с помощью метода find не сработает, т.к. string station
// не является ключом контейнера (элементом, по которому идет
// сравнение при добавлении. Вдобавок, объектов со схожим полем
// может быть несколько, поэтому просто перебираем весь
// контейнер и при совпадении выводим на экран
for (set<Airplane>::iterator it = tset.begin();
it != tset.end(); ++it)
if (it->getdeparturedate() == departuredate) // если совпадение
cout << *it << endl;
_getch(); // пауза
break;
}
case '6':
{// фигурные скобки чтобы переменные объявленные тут были локальными
int flightnumber;
string destination, surname, departuredate;
tset.clear();
break;
}
case '0':
break;
default:
cout << "Неверный ввод, повторите попытку";
_getch();
break;
} // конец switch (choise)
} // конец цикла while (choise != '0')
cout << "\n\nДо свидания!\n";
return 0; // завершилось без ошибок
}[/CPP]