Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74

Как считать из файла в контейнер STL (map)

14.12.2017, 07:45. Показов 6211. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо считать из файла с поместить в контейнер 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
void DBase::DB()
{
    ifstream fin("Park.txt");
    if (!fin.is_open()) cout << "Ошибка открытия файла\n"; // если не открылся
    else if (fin.peek() == EOF) cout << "Данный фаил пуст\n"; // если первый символ конец файла
    else cout << "\nВсе ОК! Файл открыт!\n\n";
    while (fin.is_open())
    {
        map <Bus, int> addin;
        Bus tempBus;
        while (!fin.eof())
        {
            fin >> tempBus.num; //Номер 
            fin >> tempBus.marsh; // Маршрут
            fin >> tempBus.FIO; // ФИО
        }
        addin.insert(make_pair(tempBus, tempBus.num));
        // Вывод в консоль
        for (map<Bus, int>::iterator it = addin.begin(); it != addin.end(); it++)
        {
            cout << (*it).first.num << "\t" << (*it).first.marsh << "\t" << (*it).first.FIO << "\n";
        }
    }
    fin.close();
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2017, 07:45
Ответы с готовыми решениями:

Контейнер map и алгоритмы STL: несовместимость?
Всем доброго времени суток! Столкнулся с проблемой: алгоритм remove_if не работает с контейнером map. Рассмотрим следующую функцию: ...

Работа с библиотекой STL, контейнер map
Ввожу с экрана имя и номер телефона несколько раз, но for_each почему-то выводит на экран только последнего введенного пользователя, а мне...

Чтение из файла в контейнер map
Вот есть структура struct Kino { int numb ; //номер кинотеатра string name; //название ктра vector&lt;string&gt; sv;...

10
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.12.2017, 10:16
Какой смысл в таком map? У тебя ключ содержит уже всё.
И если ФИО с пробелами, то getline().
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74
14.12.2017, 10:27  [ТС]
У меня ключ "номер". А можно пример?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.12.2017, 11:21
Цитата Сообщение от dufi_man Посмотреть сообщение
У меня ключ "номер"
9-ю строку посмотри. Первый параметр - ключ.
C++
1
2
3
map <int, Bus> addin;
//...
addin[tempBus.num] = tempBus;
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74
14.12.2017, 14:11  [ТС]
Все равно ничего не пойму переделал вроде считывает но дальше что делать ни как не пойму как занести в контейнер 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
void DBase::DB()
{
    ifstream fin("Park.txt");
    if (!fin.is_open()) cout << "Ошибка открытия файла\n"; // если не открылся
    else if (fin.peek() == EOF) cout << "Данный фаил пуст\n"; // если первый символ конец файла
    else cout << "\nВсе ОК! Файл открыт!\n\n";
    if (fin.is_open())
    {
        map <int, Bus>addin;
        Bus tempBus;
        addin[tempBus.num] = tempBus;
        while (fin)
        {
            using input = std::istream_iterator<std::string>;
            string line;
            getline(fin, line);
            std::istringstream iss(line);
            //???? addin.insert(make_pair(tempBus.num, tempBus));
        }
 
        // Вывод в консоль
//??????????????????
    
    }
    
    fin.close();
}
класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Bus
{
public:
    Bus();
    ~Bus();
    int num, marsh;
    char* FIO;
private:
};
class DBase
{
public:
    DBase();
    ~DBase();
    void DB();
};
данные(номер, маршрут, ФИО)
12 123 Сидоров А.В.
52 3 Рыбаков А.В.
45 8 Максимов И.Е.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
14.12.2017, 14:25
Цитата Сообщение от dufi_man Посмотреть сообщение
//???? addin.insert
тут всё верно заносится в map

И выводить почти точно так же
C++
1
2
3
4
        for (map<int, Bus>::iterator it = addin.begin(); it != addin.end(); ++it)
        {
            cout << (*it).first << "\t" << (*it).second.marsh << "\t" << (*it).second.FIO << "\n";
        }
Добавлено через 1 минуту
Цитата Сообщение от dufi_man Посмотреть сообщение
класс
при копировании строки не сохранятся. Используй для хранения FIO std::string
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.12.2017, 14:26
Цитата Сообщение от dufi_man Посмотреть сообщение
как занести в контейнер map
Я же показал как. 3-я строка. Ты не туда её вставил.
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74
15.12.2017, 04:00  [ТС]
Как дальше считанную строку записать в контейнер 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
void DBase::DB()
{
    ifstream fin("Park.txt");
    if (!fin.is_open()) cout << "Ошибка открытия файла\n"; // если не открылся
    else if (fin.peek() == EOF) cout << "Данный фаил пуст\n"; // если первый символ конец файла
    else cout << "\nВсе ОК! Файл открыт!\n\n";
    if (fin.is_open())
    {
        map <int, Bus>addin;
        Bus tempBus;
        while (!fin.eof())
        {
            using input = istream_iterator<string>;
            string line;
            getline(fin, line);
            istringstream iss(line);
        //Как дальше считаную строку записать в контейнер
            addin[tempBus.num] = tempBus; 
            addin.insert(make_pair(tempBus.num, tempBus));
        }
 
        // Вывод в консоль
        for (map<int, Bus>::iterator it = addin.begin(); it != addin.end(); ++it)
        {
            cout << (*it).first << "\t" << (*it).second.marsh << "\t" << (*it).second.FIO << "\n";
        }
    
    }
    
    fin.close();
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
15.12.2017, 05:04
dufi_man, нафига тебе эти мапы нужны, если ты абсолютно не в курсе, что это такое? Считывай в обычный массив и не насилуй компилятор!
Ну не знаешь ты, зачем нужны мапы, ну не судьба, бывает... но зачем тогда с упорством достойным лучшего применения их практиковать?
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74
15.12.2017, 07:33  [ТС]
Учеба, учеба!!!

Добавлено через 2 часа 28 минут
Ну кто нибудь подскажите как!!!!!!!!!!!!!!!!!!!!!
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2017, 09:15
Лучший ответ Сообщение было отмечено dufi_man как решение

Решение

C++
1
2
3
4
5
6
7
8
class Bus
{
public:
    Bus();
    ~Bus();
    int num, marsh;
    string FIO;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    if (fin.is_open())
    {
        map <int, Bus>addin;
        Bus tempBus;
 
        while ((fin >> tempBus.num >> tempBus.marsh) && getline(fin, tempBus.FIO))
            addin[tempBus.num] = tempBus; 
 
        for (map<int, Bus>::iterator it = addin.begin(); it != addin.end(); ++it)
        {
            cout << it->first << "\t" << it->second.marsh << "\t" << it->second.FIO << "\n";
        }
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2017, 09:15
Помогаю со студенческими работами здесь

Заполнить контейнер map и vector данными из файла
Текстовый файл содержит в себе информацию о пяти лифтах в виде: 12 900 first 10 600 second 15 700 third 20 1000 fourth 16 800...

Map как не ассоциативный контейнер
Здравствуйте. Я вложил в контейнер map кучу элементов с ключом String и значением - объектом моего класса (то есть значение получается не...

Как передать контейнер map в функцию?
Вопросов правда несколько, первый связан с конкретным примером. Есть карта (заполненная), ключ - стринг, значение - вектор-стринг, необх...

Контейнер map, как работает в задаче
Всем привет, не могу понять решение задачи, вот само условие(решение в конце): Имеется база регионов, представленная вектором структур...

Как удалить элементы используя контейнер STL ?
здесь удаляется по одному элементу, (т.е. передаётся один итератор), а как удалить сразу несколько элементов(т.е. передать два итератора),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru