Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Контейнерный класс map - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как такое сделать ... http://www.cyberforum.ru/cpp-beginners/thread393040.html
Используя рекурсию, ввести группу данных и вывести их в обратном порядке, не объявляя массива.
C++ Нажатие клавиш У меня есть консольное приложение, как сделать чтобы при нажатии на определенную клавишу происходили определенные действия) Например при каждой нажатии ENTER чтобы в программе допустим симво "*" ... http://www.cyberforum.ru/cpp-beginners/thread393023.html
C++ Форматирования текстового файла
Помогите пожалуйста написать задачу. Я не знаю как написать, чтобы все строки можно было расположить симметрично от средней линии. Заранее спасибо Выполнить форматирование текстового файла,...
Разработать класс, реализующий бинарное дерево. C++
Привет всем! Такая проблема - написал программу, в которой производятся действия с бинарным деревом. Структуру нужно впихнуть в класс. Как я понял, нужно создать класс и просто "расширять" его,...
C++ Незнаю как сделать програмцу на С++ http://www.cyberforum.ru/cpp-beginners/thread393004.html
Я написал програму каторая ищет максимальное значение масыва и его индекс, но тепер нужно ее сделать через указатели.. но я незнаю как. Помогите сделать.... #include <iostream> using namespace std;...
C++ Латинский квадрат Латинский квадрат. Латинским квадратом пордка n называется квадратная таблица размером nxn каждая строка и каждый столбец которой содержит все числа от 1 до n. Проверить является ли заданная... подробнее

Показать сообщение отдельно
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
27.11.2011, 19:39
Менюшки и ввод-вывод уж как-нибудь самостоятельно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <map>
#include <vector>
#include <utility>
#include <string>
#include <iterator>
#include <algorithm>
 
struct Bus {
  size_t number;
  std::string driver;
  size_t route;
  Bus() : number(0), driver(""), route(0) {}
  Bus(size_t number_, const std::string &driver_, size_t route_)
    : number(number_), driver(driver_), route(route_) {}
  friend std::ostream &operator<<(std::ostream &stream, const Bus &bus) {
    return stream << "Bus #" << bus.number << ", driver: " << bus.driver <<
      ", route: " << bus.route << ".";
  }
};
 
class Buses {
 public:
  typedef std::map<size_t, Bus> BusMap;
  Buses() : buses() {}
  void add(const Bus &bus) {
    buses[bus.number] = bus;
  }
  size_t size() const {
    return buses.size();
  }
  template <class Compare>
  std::vector<Bus> asVector(Compare compare) {
    std::vector<Bus> result;
    for (BusMap::iterator i = buses.begin(); i != buses.end(); ++i)
      result.push_back(i->second);
    std::sort(result.begin(), result.end(), compare);
    return result;
  }
  const Bus &operator[](size_t number) {
    return buses[number];
  }
  const Bus &get(size_t number) {
    return buses[number];
  }
  size_t erase(size_t number) {
    return buses.erase(number);
  }
  void moveTo(Buses &destination, size_t number) {
    destination.add(get(number));
    erase(number);
  }
  static bool compareByNumber(const Bus &a, const Bus &b) {
    return a.number < b.number;
  }
  static bool compareByRoute(const Bus &a, const Bus &b) {
    return a.route < b.route;
  }
 private:
  BusMap buses;
};
 
std::ostream &operator<<(std::ostream &stream, const std::vector<Bus> buses) {
  std::copy(buses.begin(), buses.end(), std::ostream_iterator<Bus>(stream, "\n"));
  return stream;
}
 
int main(int argc, char *argv[]) {
  Buses inPark, onRoute;
 
  // добавление автобусов
  inPark.add(Bus(102, "A.B. Ivanov", 102));
  inPark.add(Bus(309, "C.D. Petrov", 309));
  inPark.add(Bus(23, "E.F. Sidorov", 207));
  inPark.add(Bus(27, "E.F. Sidorov", 107));
 
  // вывод
  std::cout << "In park:" << std::endl <<
    // автобусов в парке (отсортированных по номеру)
    inPark.asVector(Buses::compareByNumber) <<
    "On route:" << std::endl <<
  // и на маршруте (отсторированных по маршруту
    onRoute.asVector(Buses::compareByRoute) <<
    "========================================================" << std::endl;
 
  // из парка на маршрут
  inPark.moveTo(onRoute, 23);
  inPark.moveTo(onRoute, 102);
  inPark.moveTo(onRoute, 27);
 
  // вывод
  std::cout << "In park:" << std::endl << inPark.asVector(Buses::compareByNumber) <<
    "On route:" << std::endl << onRoute.asVector(Buses::compareByRoute) <<
    "========================================================" << std::endl;
 
  // из маршрута в парк
  onRoute.moveTo(inPark, 23);
  onRoute.moveTo(inPark, 27);
 
  // вывод
  std::cout << "In park:" << std::endl << inPark.asVector(Buses::compareByNumber) <<
    "On route:" << std::endl << onRoute.asVector(Buses::compareByRoute) <<
    "========================================================" << std::endl;
}
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru