Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * main.cpp
- *
- * Created on: 5 авг. 2020 г.
- * Author: kirill
- */
- #include<iostream>
- #include<map>
- #include<string>
- #include<vector>
- using namespace std;
- int main() {
- map<string, vector<string>> bus; //контейнер с автобусами и их остановками
- vector<string> tempotary; //вектор - костыль для оста
- int nums;
- cin >> nums;
- for (int i = 0; i < nums; ++i) {
- string command;
- cin >> command; //команда выбора
- /********************************************************************************************************************/
- if (command == "NEW_BUS") {
- string nums;
- cin >> nums; //номер автобуса
- tempotary.push_back(nums);
- int quant;
- cin >> quant; //количество остановок
- vector<string> stops(quant); //вектор с остановками
- for (auto &s : stops) {
- cin >> s; //вводим остановки в вектор остановок
- }
- bus[nums] = stops; //в ячейке с номером автобуса лежит вектор остановок
- stops.clear(); //очищаем вектор остановок
- /****************************************************************************************************************/
- } else if (command == "BUSES_FOR_STOP") {
- string stop_name;
- cin >> stop_name; //название остановки
- map<string, vector<string>> stops; //контейнер остановка - автобусы через неё
- for (const auto &s : bus) { //перебирает все элементы контейнера автобус-остановки
- for (const auto &t : s.second) { //перебирает все остановки для каждого автобуса
- if (t == stop_name) { //если есть соответствие остановка в маршруте = заданная остановка
- stops[s.first].push_back(t); //добавляем в контейнер типа остановка - автобусы
- }
- }
- }
- if (stops.size() == 0) { //проверяем размер контейнера с результатом
- cout << "No stop\n";
- } else { //если размер контейнера с результатом не равен нулю
- vector<string> no_sort_1;
- vector<string> res_1;
- for (const auto &e : stops) { //перебираем элементы контейнера map
- no_sort_1.push_back(e.first);
- }
- for(const auto& s : tempotary){
- for(const auto& t : no_sort_1){
- if(s==t){
- res_1.push_back(s);
- }
- }
- }
- for(const auto& s : res_1){
- cout<<s<<' ';
- }
- cout<<endl;
- }
- /****************************************************************************************************************/
- } else if (command == "STOPS_FOR_BUS") {
- string bus_num; //Номер автобуса
- cin >> bus_num;
- auto temp = bus; //Создаем копию, чтобы не изменять исходный вектор
- if (temp[bus_num].size() == 0) { //Случай пустого множества
- cout << "No bus\n";
- } else {
- vector<string> bus_stop = temp[bus_num]; //Сохраним вектор остановок
- vector<vector<string>> result(bus_stop.size()); //вектор для маршрутов, индексация и размер одинаковые
- for (size_t i = 0; i < bus_stop.size(); ++i) { //сравниваем пошагово с каждой остановкой
- for (const auto &s : bus) { //перебираем все маршруты с остановками
- for (auto t : s.second) { //перебираем все остановки всех маршрутов
- if (bus_stop[i] == t && s.first != bus_num) {
- result[i].push_back(s.first); //добавляем название автобуса во второй вектор
- }
- }
- }
- }
- for (size_t i = 0; i < bus_stop.size(); ++i) {
- cout << "Stop " << bus_stop[i] << ": "; //выводи название остановки
- vector<string> tmp;
- vector<string> no_sort;
- if (result[i].size() != 0) {
- for (const auto &s : result[i]) { //выводим через пробел автобусы
- tmp.push_back(s);
- }
- for(const auto& s : tempotary){
- for(const auto& t : tmp){
- if(s==t){
- no_sort.push_back(s);
- }
- }
- }
- for(const auto& s : no_sort){
- cout<<s<<' ';
- }
- cout<<endl;
- } else {
- cout << "no interchange\n";
- }
- }
- }
- /****************************************************************************************************************/
- } else if (command == "ALL_BUSES") {
- if (bus.size() == 0) { //Случай пустого контейнера
- cout << "No buses\n";
- } else { //случай непустого множества
- for (const auto &s : bus) { //перебираем элементы контейнера
- cout << "Bus " << s.first << ": "; //выводим размер и название автобуса
- for (const auto &t : s.second) { //перебираем вектор остановок
- cout << t << ' ';
- }
- cout << '\n';
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement