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

Чтение из файла и заполнение контейнера map

04.11.2015, 16:25. Показов 7760. Ответов 8

Студворк — интернет-сервис помощи студентам
Есть такое задание: дан файл,в котором записаны имена студентов.Напротив каждого имени - их оценки.Нужно считать из файла это всё в контейнер map,причем оценки должны записаться в контейнер vector,чтобы в дальнейшем можно их было изменять. У меня получается или для одного считать все,или выводит все данные в строчку. Вместо вектора использовать структуру я думаю не получится,ведь в дальнейшем нужно сдлеать функцию добавления еще одного поля оценки
Файл std имее вид:
Миша 2 1
Петя 3
Рома 3 7 3 4
Влад 5 2 0

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
#include "stdafx.h"
#include <iostream>
#include <map>
#include <fstream>
#include <vector>
#include <iterator>
#include <string>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    typedef vector<int> Vector;
    typedef multimap<string, vector<int> > maps;
    maps mapfile;
    ifstream file("std.txt");
    Vector vec;
    string name;
    if (file.is_open())
    {
        while (file)
        {
            file >> name;
            for (int i = 0; i < vec.size(); i++)
                vec.push_back(i);
                //file >> vec[i];
            mapfile.insert(make_pair(name, vec));
            
         }
        }
    for (maps::const_iterator it = mapfile.begin(); it != mapfile.end(); ++it) 
    {
        cout << (*it).first << " ";
        for (int i = 0; i < vec.size(); i++)
        {
            Vector::iterator iter = vec.begin();
            advance(iter, i);
            vec = it->second;
            cout << vec[i] << " ";
        }
    }
    system("pause");
    return 0;
}
Миниатюры
Чтение из файла и заполнение контейнера map  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2015, 16:25
Ответы с готовыми решениями:

Заполнение контейнера map из файла без цикла
В общем, вопрос следущий. Интересует, возможно ли инициализировать контейнер map, данными из файла, без использования циклов. Например,...

Заполнение контейнера map объектами класса
Здравствуйте! Помогите разобраться с map. Не получается заполнить контейнер объектами класса. Если можно, напишите простой пример.

Считывание из файла и заполнение контейнера объектами
Доброго времени суток. Необходимо осуществить считывание данных из файла, на основе считанных данных заполнять поля объекта класса. ...

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.11.2015, 17:15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    ifstream file("std.txt");
    Vector vec;
    string name, s;
    int n;
    if (file.is_open())
    {
        while (file >> name)
        {
            geline(file, s);
            std::istringstream iss(s);
            vec.clear();
            while (iss >> n) vec.push_back(n);
            mapfile.insert(make_pair(name, vec));
         }
    }
0
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 20
05.11.2015, 00:36  [ТС]
Спасибо большое. Подскажите еще, чтобы происходил поиск с русским языком,что нужно сделать? На латинице через функцию find() ищет,на русском - нет
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
05.11.2015, 06:27
Функции find() всё равно, что искать. Главное, согласуй кодировки.
0
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 20
07.11.2015, 14:40  [ТС]
Подскажите, почему у меня выодит оценки только для Vlad ( 5 2 0 1) ,какое бы я имя для поиска не ввёл. И правильно ли я делаю дальше вставку эл-в?
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
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    typedef vector<int> Vector;
    typedef multimap<string, vector<int> > maps;
    maps mapfile;
    ifstream file("std.txt");
    Vector vec;
    string name, s;
    int n;
    if (file.is_open())
    {
        while (file >> name)
        {
            getline(file, s);
            istringstream iss(s);
            vec.clear();
            while (iss >> n) 
                vec.push_back(n);
            mapfile.insert(make_pair(name, vec));
        }
    }
    for (maps::const_iterator it = mapfile.begin(); it != mapfile.end(); ++it) 
    {
        cout << (*it).first << " ";
        for (int i = 0; i < vec.size(); i++)
        {
            Vector::iterator iter = vec.begin();
            advance(iter, i);
            vec = it->second;
            cout << vec[i] << " ";
        }
        cout << endl;
    }
    cout << "Enter name: ";
    string search_name;
    cin >> search_name;
    maps::iterator search;
    search = mapfile.find(search_name);
    cout << search->first << " ";
    Vector::iterator vec_it;
    for (vec_it = vec.begin(); vec_it != vec.end(); vec_it++)
        cout << *vec_it << " ";
    /*for (auto i = 0; i!= vec.size();i++)
        cout << search->second[i] << " ";*/
    /*cout << "Enter a mark: ";
    int mark;
    cin >> mark;
    cout << "Enter position: ";
    int insert;
    cin >> insert;
    Vector::iterator pos = vec.begin();
    vec.insert(pos+insert-1, mark);
    */
    system("pause");
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.11.2015, 15:01
Надо проверять, что search не равен mapfile.end(), т. е. что поиск успешен.
Кодировка, наверное, не совпадает. На английских именах проверь для начала.
0
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 20
07.11.2015, 15:09  [ТС]
Не получается.
И я файл поменял на англ, потом с кодировкой разберусь.Там теперь Misha,Petya,Roma,Vlad.
До этого я выводил так:
C++
1
2
for (auto i = 0; i!= vec.size();i++)
        cout << search->second[i] << " ";
Но тогда,когда я вводил "Misha" ,писало ошибку,что индекс вектора вышел за пределы,а когда вводил "Roma",то не выводилось последнее число.На остальных всё работало
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.11.2015, 15:55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    for (maps::const_iterator it = mapfile.begin(); it != mapfile.end(); ++it) 
    {
        cout << it->first << " ";
        for (int i = 0; i < it->second.size(); ++i) cout << it->second[i] << " ";
        cout << endl;
    }
 
    string search_name;
    cout << "Enter name: ";
    cin >> search_name;
 
    maps::iterator search = mapfile.find(search_name);
    if (search == mapfile.end()) cout << "Не найдено.\n";
    else
    {
        cout << search->first << " ";
        for (Vector::iterator vec_it = search->second.begin(); vec_it != search->second.end(); ++vec_it)
            cout << *vec_it << " ";
        cout << endl;
    }
1
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 20
18.11.2015, 13:06  [ТС]
Подскажите пожалуйста,никак не добавляет еще одну оценку в конец. И как сделать доступ к оценке по индексу,чтобы её менять? К тому же,по идее, в выводе,если у кого-то оценок меньше,чем размер вектора,то он должен на пустые места вставить нули,а этого не происходит.
Прошу простить за тупость
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
#include "stdafx.h"
#include <iostream>
#include <map>
#include <fstream>
#include <vector>
#include <iterator>
#include <string>
#include <sstream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    typedef vector<int> Vector;
    typedef multimap<string, vector<int> > maps;
    maps mapfile;
    ifstream file("std.txt");
    Vector vec(5);
    string name, s;
    int n;
    if (file.is_open())
    {
        while (file >> name)
        {
            getline(file, s);
            istringstream iss(s);
            vec.clear();
            while (iss >> n)
                vec.push_back(n);
            mapfile.insert(make_pair(name, vec));
 
        }
    }
    for (maps::const_iterator it = mapfile.begin(); it != mapfile.end(); ++it) 
    {
        cout << (*it).first << " ";
        for (int i = 0; i < vec.size(); i++)
        {
            Vector::iterator iter = vec.begin();
            advance(iter, i);
            vec = it->second;
            cout << vec[i] << " ";
        }
        cout << endl;
    }
    string search_name;
    cout << "Enter name: ";
    cin >> search_name;
    cout << "Enter mark to add in last column: ";
    int mark; cin >> mark;
    /*cout << "Enter position";
    int pos; cin >> pos;*/
    maps::iterator search = mapfile.find(search_name);
    if (search == mapfile.end())
        cout << "No matches!\n";
    else
    {
        cout << search->first << " ";
    //  for (Vector::iterator vec_it = search->second.begin(); vec_it != search->second.end(); ++vec_it)  
        ///*for (int i = 0; i < vec.size(); i++)
        //  cout << vec[i] << " ";*/
        for (maps::const_iterator it = mapfile.begin(); it != mapfile.end(); ++it)
        for (int i = 0; i < vec.size(); i++)
        {
            vec.push_back(mark);
            cout << (*it).second[i] << " ";
        }
        cout << endl;
    }
 
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2015, 13:06
Помогаю со студенческими работами здесь

Заполнение map из файла
Народ помогите, как заполнить контейнер map из файла? Файл представлен данными по типу: 5671234 Ivanov 3214567 Petrov 9871234...

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

Чтение файла и помещение его в map
при запросе ключа выдается большое положительное(56664334242) или отрицательное значение (-7984242452), а должен быть string. ...

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

Использование контейнера map
Доброе утро) Никак не пойму как пользоваться контейнером map и зачем он, вообще, нужен?! Скажем есть у меня такая программа(или точнее...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru