Форум программистов, компьютерный форум 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++
Привет всем! Такая проблема - написал программу, в которой производятся действия с бинарным деревом. Структуру нужно впихнуть в класс. Как я понял, нужно создать класс и просто "расширять" его, добавляя новые функции. Но на деле, не сильно у меня это выходит. Вот тест программы с деревом. #include <stdlib.h> #include<string.h> #include<stdio.h> #include <iostream.h> #include <conio.h>...
C++ Незнаю как сделать програмцу на С++ http://www.cyberforum.ru/cpp-beginners/thread393004.html
Я написал програму каторая ищет максимальное значение масыва и его индекс, но тепер нужно ее сделать через указатели.. но я незнаю как. Помогите сделать.... #include <iostream> using namespace std; int main() / { setlocale(LC_ALL,"Russian"); const int arraySize = 10; int A; int index_max = 0;
C++ Латинский квадрат Латинский квадрат. Латинским квадратом пордка n называется квадратная таблица размером nxn каждая строка и каждый столбец которой содержит все числа от 1 до n. Проверить является ли заданная целочисленная матрица латинским квадратом. Я так понимаю в этой задаче три этапа: проверка введенных данных (действительно ли квадрат), действительно ли числа в матрице от 1 до n, сравнение элементов строк и... подробнее

Показать сообщение отдельно
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
27.11.2011, 19:39     Контейнерный класс map
Менюшки и ввод-вывод уж как-нибудь самостоятельно.
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;
}
 
Текущее время: 00:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru