Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
1

Map, карта в карте

10.10.2014, 17:43. Просмотров 2017. Ответов 23
Метки нет (Все метки)

У меня возник такой вопрос, хочу сделать map в map, например
C++
1
 map < string , map <int ,int >> something
как мне получить доступ к второй карте именно
C++
1
map<string , map <int ,int>> :: iterator iter
в цикле
C++
1
iter->second
ведь это будет не корректно пытался сделать так тоже не получается (iter->second)->iter.
И чем отличается это
C++
1
map < pair<string ,int> , int> collector;
от
C++
1
map <  map<string , int> , int>
.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2014, 17:43
Ответы с готовыми решениями:

Задача по теме карта (map)
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;map&gt;...

Разработка контейнера типа Карта (Map)
Приветсвую всех форумчан! Имеется задача разработать решение реализующее динамическую структуру...

Разработка контейнера типа Карта (Map)
Приветсвую всех форумчан! Имеется задача разработать решение реализующее динамическую структуру...

Map Overlay линия на карте
Здравствуйте. Не могу понять как отразить линию на карте, соединяющую две точки(имеются координаты...

23
2368 / 1779 / 387
Регистрация: 15.12.2013
Сообщений: 7,526
10.10.2014, 18:46 2
Цитата Сообщение от FloraWinx Посмотреть сообщение
И чем отличается это
http://ru.cppreference.com/w/cpp/utility/pair

http://ru.cppreference.com/w/cpp/container/map

А в какой задаче у вас требуется map,содержащий map?

Добавлено через 22 минуты
И набросал маленькую демонстрацию:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
map<string,map<int,int>> mymap;
map<int,int>temp;
temp[1]=0;
mymap["a"]=temp;
temp[8]=14;
mymap["b"]=temp;
temp[5]=8;
mymap["c"]=temp;
for(auto iter =mymap.begin();iter!=mymap.end();iter++)
    {
    cout<<"iter->first:\t";
    cout<<iter->first<<endl;
    cout<<"iter->second:\t";
    cout<<endl;
    for(auto j=iter->second.begin();j!=iter->second.end();++j)
        {
        cout<<"j->first:\t";
        cout<<j->first<<endl;
        cout<<"j->second:\t";
        cout<<j->second<<endl;
        }
    cout<<endl<<endl;
    }
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 18:48  [ТС] 3
вот например, есть у меня текст, как подсчитать частоту тех слов которые встречаются у тексте больше двух раз, при этом выводить слово его строку и частоту слова в строке.)
0
2368 / 1779 / 387
Регистрация: 15.12.2013
Сообщений: 7,526
10.10.2014, 18:59 4
Цитата Сообщение от FloraWinx Посмотреть сообщение
при этом выводить слово его строку и частоту слова в строке.)
А если 1 слово встречается в 3 строках.Или строка содержит более одного слова с повторением?
Корректно ли будет переформулировать задачу так?
1)вывод слова,частоты слова и строк не содержащих уникальных слов.
2)вывод слова,частоты слова и строк содержащих хотя-бы одно из не уникальных слов.
3) вывод слова,частоты и строк,в котором оно встречается.
Конкретизируйте задачу,желательно с примером.
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 19:04  [ТС] 5
Если слово встречается хотя бы больше одного раза в тексте тогда выводить.
Если даже 1 слово в 3 строках одновременно , тоже выводить и отобразить номер строки и частоту этого слова в строке. Ну вот например.
Hello my name is
He my is n
tell me more
---------------
my - (строка 1 - 1/4) and ( строка 2 - 1/4)
0
3199 / 2012 / 344
Регистрация: 24.11.2012
Сообщений: 4,838
10.10.2014, 19:06 6
Цитата Сообщение от FloraWinx Посмотреть сообщение
выводить слово его строку и частоту слова в строке.)
C++
1
2
3
4
5
6
7
struct Stat {
  int line_number;
  int count;
};
 
using Stats = std::vector<Stat>;
using WordCount = std::map<std::string, Stats>;
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 19:08  [ТС] 7
как это грамотно подать в виде мапы интересует,
я думал сделать так
map < строка , map < int , int >> где int - номер строки , а int - частота. Вот проблема только в том что не пойму как оно будет хранить номер строки, так map <int ,int > это уже получается Value которое в мапе меняется.

Добавлено через 1 минуту
0x10 , спасибо конечно но интересует вариант через карты, можно без кода, написать и сам могу, идею подкиньте )
0
2368 / 1779 / 387
Регистрация: 15.12.2013
Сообщений: 7,526
10.10.2014, 19:10 8
FloraWinx, так вам предлагают,сделайте ключом слово,а частоту и индекс строки - значением-структурой.
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 19:14  [ТС] 9
0x10 , спасибо если я у меня не получится сделать так как я хотел я использую ваш вариант.
0
3199 / 2012 / 344
Регистрация: 24.11.2012
Сообщений: 4,838
10.10.2014, 19:20 10
FloraWinx, да я просто не понимаю в чем проблема.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <map>
#include <string>
 
int main() {
    std::map<std::string, std::map<int, int>> m;
    ++m["hello"][42];
    
    for (const auto& item : m) {
        std::cout << item.first << std::endl;
        for (const auto& stat : item.second) {
            std::cout << "Line: " << stat.first
                << " count " << stat.second << std::endl;
        }
    }
}
1
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 20:21  [ТС] 11
как корректно сделать insert в такой тип карты
collector.insert( make_pair <string , pair <int ,int >> (word, (num,num )); так не корректно
0
3199 / 2012 / 344
Регистрация: 24.11.2012
Сообщений: 4,838
10.10.2014, 20:25 12
Зачем вообще insert?
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <map>
#include <string>
 
int main() {
    std::map<std::string, std::map<int, int>> m;
    m["hello"][42] = 100500;
}
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 20:26  [ТС] 13
Ну вот допустим
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    map <string   ,map  <int , int>> collector; // our map
    map <string   ,map  <int , int>> ::iterator iteration;
    map <string   ,map  <int , int>> ::iterator temp;
 
 
    while (wordread(in,word,num))
    {
 
    
    for(iteration = collector.begin(); iteration != collector.end(); iteration++){
        iteration = collector.find(word);
        if(iteration==collector.end()){
            collector.insert( make_pair <string , pair <int ,int >> (word, (num,num ));
 
        }
    }
если слово не нашел заталкиваю его )
0
3199 / 2012 / 344
Регистрация: 24.11.2012
Сообщений: 4,838
10.10.2014, 20:28 14
FloraWinx, в примере выше ключа в мапе не было, элемент создается при попытке обращения.
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 20:32  [ТС] 15
0x10 вы о моем примере ?
0
3199 / 2012 / 344
Регистрация: 24.11.2012
Сообщений: 4,838
10.10.2014, 20:32 16
Цитата Сообщение от FloraWinx Посмотреть сообщение
вы о моем примере ?
Нет, я про пост 12.
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
10.10.2014, 21:11  [ТС] 17
не понял о чем вы
0
3199 / 2012 / 344
Регистрация: 24.11.2012
Сообщений: 4,838
11.10.2014, 08:22 18
Ну ок, попробуем разобрать.
Вот что происходит тут?
Цитата Сообщение от FloraWinx Посмотреть сообщение
C++
1
2
3
4
5
6
for(iteration = collector.begin(); iteration != collector.end(); iteration++){
* * * * iteration = collector.find(word);
* * * * if(iteration==collector.end()){
* * * * * * collector.insert( make_pair <string , pair <int ,int >> (word, (num,num ));
}
* * }
Сначала обходим контейнер в цикле. Итератору присваиваем итератор на начало контейнера. Далее в теле цикла тут же итератору присваиваем новое значение - результат поиска слова. Ерунда? Определенно.

Зачем вообще производить поиск в мапе?
Читаем файл построчно. Знаем номер строки. Считываем строку по словам. Итого у нас есть слово и номер строки. Фактически два ключа, по которым нужно обратиться и увеличить счетчик. Как это сделать - пост 10, строка 7.
0
4 / 4 / 0
Регистрация: 05.10.2013
Сообщений: 123
11.10.2014, 09:28  [ТС] 19
да с циклом согласный это полный бред вот только строка 7 пост 10
C++
1
 ++m["hello"][42];
это ведь я ручками записываю , а я хотел считать записать.
0
3199 / 2012 / 344
Регистрация: 24.11.2012
Сообщений: 4,838
11.10.2014, 09:34 20
Цитата Сообщение от FloraWinx Посмотреть сообщение
это ведь я ручками записываю
Кто мешает вместо захардкоженых значений подставить переменные?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2014, 09:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как измерить пройденное расстояние по карте Google Map?
Приветствую! Я знаю как найти путь по карте Гугл на смартфоне. Как можно с её помощью увидеть,...

C++ SFML не загружается map.tmx карта
Я создаю игру использую c++ sfml , облазил уже весь интернет в поисках ответа на вопрос . Дело в...

Карта города на PHP, поиск по карте при помощи скрипта
Подскажите пожалуйста как сделать поиск по данной карте.Например я ввожу:пер, Учительский 5;и мне...

Из 3 колод по 36 карт вынимают по одной карте.Какова вероятность,что хотя бы одна карта окажется красной масти
Напишите, пожалуйста, как решить данный тип задачи.

Поместить вектора в map и реализовать перегрузку вывода для map
Всем привет! Нужна помощь в написании программы. У меня есть вот такая прога и мне нужно каким-то...

Обращение к элементам vector, который находится в map, находящийся в map
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить...


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

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

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