Advertisement
kirill1920

bus_stop

Aug 7th, 2020
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.35 KB | None | 0 0
  1. /*
  2.  * main.cpp
  3.  *
  4.  *  Created on: 5 авг. 2020 г.
  5.  *      Author: kirill
  6.  */
  7. #include<iostream>
  8. #include<map>
  9. #include<string>
  10. #include<vector>
  11. using namespace std;
  12. int main() {
  13.     map<string, vector<string>> bus; //контейнер с автобусами и их остановками
  14.     vector<string> tempotary; //вектор - костыль для оста
  15.     int nums;
  16.     cin >> nums;
  17.     for (int i = 0; i < nums; ++i) {
  18.         string command;
  19.         cin >> command; //команда выбора
  20.         /********************************************************************************************************************/
  21.         if (command == "NEW_BUS") {
  22.             string nums;
  23.             cin >> nums; //номер автобуса
  24.             tempotary.push_back(nums);
  25.             int quant;
  26.             cin >> quant; //количество остановок
  27.             vector<string> stops(quant); //вектор с остановками
  28.             for (auto &s : stops) {
  29.                 cin >> s; //вводим остановки в вектор остановок
  30.             }
  31.             bus[nums] = stops; //в ячейке с номером автобуса лежит вектор остановок
  32.             stops.clear(); //очищаем вектор остановок
  33.             /****************************************************************************************************************/
  34.         } else if (command == "BUSES_FOR_STOP") {
  35.             string stop_name;
  36.             cin >> stop_name; //название остановки
  37.             map<string, vector<string>> stops; //контейнер остановка - автобусы через неё
  38.             for (const auto &s : bus) { //перебирает все элементы контейнера автобус-остановки
  39.                 for (const auto &t : s.second) { //перебирает все остановки для каждого автобуса
  40.                     if (t == stop_name) { //если есть соответствие остановка в маршруте = заданная остановка
  41.                         stops[s.first].push_back(t); //добавляем в контейнер типа остановка - автобусы
  42.                     }
  43.                 }
  44.             }
  45.             if (stops.size() == 0) { //проверяем размер контейнера с результатом
  46.                 cout << "No stop\n";
  47.             } else { //если размер контейнера с результатом не равен нулю
  48.                 vector<string> no_sort_1;
  49.                 vector<string> res_1;
  50.                 for (const auto &e : stops) { //перебираем элементы контейнера map
  51.                     no_sort_1.push_back(e.first);
  52.                 }
  53.                 for(const auto& s : tempotary){
  54.                     for(const auto& t : no_sort_1){
  55.                         if(s==t){
  56.                             res_1.push_back(s);
  57.                         }
  58.                     }
  59.                 }
  60.                 for(const auto& s : res_1){
  61.                     cout<<s<<' ';
  62.                 }
  63.                 cout<<endl;
  64.             }
  65.             /****************************************************************************************************************/
  66.  
  67.         } else if (command == "STOPS_FOR_BUS") {
  68.             string bus_num; //Номер автобуса
  69.             cin >> bus_num;
  70.             auto temp = bus; //Создаем копию, чтобы не изменять исходный вектор
  71.             if (temp[bus_num].size() == 0) { //Случай пустого множества
  72.                 cout << "No bus\n";
  73.             } else {
  74.                 vector<string> bus_stop = temp[bus_num]; //Сохраним вектор остановок
  75.                 vector<vector<string>> result(bus_stop.size()); //вектор для маршрутов, индексация и размер одинаковые
  76.                 for (size_t i = 0; i < bus_stop.size(); ++i) { //сравниваем пошагово с каждой остановкой
  77.                     for (const auto &s : bus) { //перебираем все маршруты с остановками
  78.                         for (auto t : s.second) { //перебираем все остановки всех маршрутов
  79.                             if (bus_stop[i] == t && s.first != bus_num) {
  80.                                 result[i].push_back(s.first); //добавляем название автобуса во второй вектор
  81.                             }
  82.                         }
  83.                     }
  84.                 }
  85.  
  86.                 for (size_t i = 0; i < bus_stop.size(); ++i) {
  87.                     cout << "Stop " << bus_stop[i] << ": "; //выводи название остановки
  88.                     vector<string> tmp;
  89.                     vector<string> no_sort;
  90.                     if (result[i].size() != 0) {
  91.                         for (const auto &s : result[i]) { //выводим через пробел автобусы
  92.                             tmp.push_back(s);
  93.                         }
  94.                         for(const auto& s : tempotary){
  95.                             for(const auto& t : tmp){
  96.                                 if(s==t){
  97.                                     no_sort.push_back(s);
  98.                                 }
  99.                             }
  100.                         }
  101.                         for(const auto& s : no_sort){
  102.                         cout<<s<<' ';
  103.                         }
  104.                         cout<<endl;
  105.                     } else {
  106.                         cout << "no interchange\n";
  107.                     }
  108.  
  109.                 }
  110.             }
  111.             /****************************************************************************************************************/
  112.         } else if (command == "ALL_BUSES") {
  113.             if (bus.size() == 0) { //Случай пустого контейнера
  114.                 cout << "No buses\n";
  115.             } else { //случай непустого множества
  116.                 for (const auto &s : bus) { //перебираем элементы контейнера
  117.                     cout << "Bus " << s.first << ": "; //выводим размер и название автобуса
  118.                     for (const auto &t : s.second) { //перебираем вектор остановок
  119.                         cout << t << ' ';
  120.                     }
  121.                     cout << '\n';
  122.                 }
  123.             }
  124.         }
  125.     }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement