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

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

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

Author24 — интернет-сервис помощи студентам
Необходимо считать из файла с поместить в контейнер 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2017, 07:45
Ответы с готовыми решениями:

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

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

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

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

10
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
14.12.2017, 10:16 2
Какой смысл в таком map? У тебя ключ содержит уже всё.
И если ФИО с пробелами, то getline().
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74
14.12.2017, 10:27  [ТС] 3
У меня ключ "номер". А можно пример?
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
14.12.2017, 11:21 4
Цитата Сообщение от 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  [ТС] 5
Все равно ничего не пойму переделал вроде считывает но дальше что делать ни как не пойму как занести в контейнер 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
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
14.12.2017, 14:25 6
Цитата Сообщение от 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
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
14.12.2017, 14:26 7
Цитата Сообщение от dufi_man Посмотреть сообщение
как занести в контейнер map
Я же показал как. 3-я строка. Ты не туда её вставил.
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74
15.12.2017, 04:00  [ТС] 8
Как дальше считанную строку записать в контейнер 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
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,492
Записей в блоге: 1
15.12.2017, 05:04 9
dufi_man, нафига тебе эти мапы нужны, если ты абсолютно не в курсе, что это такое? Считывай в обычный массив и не насилуй компилятор!
Ну не знаешь ты, зачем нужны мапы, ну не судьба, бывает... но зачем тогда с упорством достойным лучшего применения их практиковать?
0
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 74
15.12.2017, 07:33  [ТС] 10
Учеба, учеба!!!

Добавлено через 2 часа 28 минут
Ну кто нибудь подскажите как!!!!!!!!!!!!!!!!!!!!!
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
15.12.2017, 09:15 11
Лучший ответ Сообщение было отмечено 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
15.12.2017, 09:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2017, 09:15
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru