Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Jack_15
1 / 1 / 0
Регистрация: 13.09.2015
Сообщений: 56
1

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ?

08.11.2015, 09:29. Просмотров 717. Ответов 8
Метки нет (Все метки)

У меня есть map<string, map<string,int>>, в него надо добавить элементы (типа Ivanov potato 200)
Использовать именно map<string, map<string,int>>. Но что-то никак не получается ни добавить элементы, ни вывести их на экран

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
#include <iostream>
#include <map>
#include <string>
#include <fstream>
#include <iterator>
using namespace std;
 
int main(int argc, char* argv[]) {
    ifstream fin("input.txt");
 
    string a, b;
    int c;
    map<string, map<string, int> > MyMap;
 
    while (fin >> a >> b >> c) {
        MyMap[a].insert(b,c);
        //MyMap.insert(make_pair(a, (b, c)));
        //MyMap[a] = make_pair(b,c);
    }
 
    for (map<string, map<string, int> >::iterator it = MyMap.begin(); it != MyMap.end(); ++it) 
        std::cout << it->first << " " << it->second << endl;
 
 
    fin.close();
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2015, 09:29
Ответы с готовыми решениями:

Как перебрать все элементы в map<string, vector<string>>
Доброго времени суток. Решаю следующую задачу: В файле есть сведения об...

Запись значения в map<string, map<string,string>>
Как корректно записать значение в map&lt;string, map&lt;string,string&gt;&gt;? Добавлено...

Как перегрузить оператор [] для map<string, int>?
map&lt;string, int&gt; m; map&lt;string, int&gt;::iterator at, begin, end; string...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void...

Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные?
Добрый день, подскажите, есть ли аналог Map &lt;String,String&gt; чтобы передавать...

8
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
08.11.2015, 09:33 2
Лучший ответ Сообщение было отмечено Jack_15 как решение

Решение

Без проверки существования элемента:
C++
1
2
3
4
5
6
    while (fin >> a >> b >> c)
    {
        map<string, int> t;
        t[b] = c;
        MyMap[a] = t;
    }
1
Jack_15
1 / 1 / 0
Регистрация: 13.09.2015
Сообщений: 56
08.11.2015, 09:44  [ТС] 3
nmcf, спасибо большое!
А подскажите ещё, как вывести все значения мепа на экран? Именно в формате:
Ivanov potato 200
Petrov carrot 100
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
08.11.2015, 10:07 4
C++
1
2
3
4
5
6
7
    for (map<string, map<string, int> >::iterator it = MyMap.begin(); it != MyMap.end(); ++it)
    {
        std::cout << it->first << ' ' << endl;
        for (map<string, int>::iterator it1 = it->second.begin(); it1 != it->second.end(); ++it1)
            std::cout << it1->first << ' ' << it1->second;
        std::cout << std::endl;
    }
1
Jack_15
1 / 1 / 0
Регистрация: 13.09.2015
Сообщений: 56
08.11.2015, 11:22  [ТС] 5
nmcf, еще такая проблема возникла... Для каждой фамилии может быть несколько значений. Т.е. может быть такая ситуация:
Ivanov potato 50
Petrov carrot 100
Ivanov fish 20
Ivanov potato 30
Petrov carrot 80

И надо вывести:
Ivanov:
potato 80
fish 20
Petrov:
carrot 180

Т.е. чтобы у каждой фамилии могло быть несколько значений и цены могли меняться... Я пробовал напсиать вот так, но тогда меп tmp как бы одинаковый для каждой фамилии и в данном примере для Petrov выведется не только carrot, но и potato, и fish... Подскажите, как это исправить?

C++
1
2
3
4
5
6
7
map<string, map<string, int>> info;
map<string, int> tmp;
    while (fin >> surname >> purchase >> price) {
        int t1 = tmp[purchase] + price;
        tmp[purchase] = t1;
        info[surname] = tmp;
    }
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
08.11.2015, 11:38 6
Я же написал, что пример без проверки существования элемента. Надо проверять:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    while (fin >> a >> b >> c)
    {
        map<string, map<string, int>> it;
        if ((it = MyMap.find(a)) != MyMap.end())
        {
            (it->second)[b] = c;
        }
        else
        {
            map<string, int> t;
            t[b] = c;
            MyMap[a] = t;
        }
    }
0
Jack_15
1 / 1 / 0
Регистрация: 13.09.2015
Сообщений: 56
08.11.2015, 13:30  [ТС] 7
nmcf, но it в этом коде - это ведь выходит название мепа...
Вот так надо? Но он не работает(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
map<string, map<string, int>>  myMap;
while (fin >> a >> b >> c){
            if ((myMap.find(a)) != myMap.end())
            {
                myMap[b] = c;
            }
            else
            {
                map<string, int> t;
                t[b] = c;
                myMap[a] = t;
            }
    }
0
pproger
165 / 68 / 17
Регистрация: 22.03.2011
Сообщений: 196
08.11.2015, 14:15 8
Jack_15,

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
#include <iostream>
#include <fstream>
#include <map>
 
using namespace std;
 
int main()
{
    map<string, map<string, int>> info;
    fstream fin("input.txt");
    string surname, purchase;
    int price;
 
    while (fin >> surname >> purchase >> price) {
        info[surname][purchase] += price;
    }
 
    for (auto i : info) {
        cout << i.first << ":" << endl;
        for (auto j : i.second) {
            cout << j.first << ": " << j.second << endl;
        }
    }
}
1
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
08.11.2015, 14:27 9
Цитата Сообщение от Jack_15 Посмотреть сообщение
но it в этом коде - это ведь выходит название мепа
it - это список овощей конкретного Иванова или Петрова.
Как я показал, так и должно быть.
0
08.11.2015, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2015, 14:27

Работа с map<string, map<string, string>>
Всем привет! Что-то запарился в неожиданном месте... Есть тип данных,...

Сохранение/чтение map<string,string*> в файл
Доброго времени суток, Нужно сделать БД для индексации содержимого...

Как добавить и вывести элементы из List<int, string> ?
В инете нашёл инфу только по обычным спискам (одного типа). Помогите, как в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru