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

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

14.12.2017, 07:45. Показов 6178. Ответов 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,531
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru