Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.63
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
#1

Ассоциативный контейнер типа map - C++

18.09.2011, 17:46. Просмотров 3033. Ответов 10
Метки нет (Все метки)

Привет! Помогите пожалуйста найти ошибку. Программа с Ассоциативным контейнером типа map<string, int>. Прога подсчитывает колличество введёных слов. Ввожу в карту слова-ключи, если слово повторяется , то счётчик увеличивается (счётчик - это значение типа int в моей карте). И в конце выводит все ключи и значения на экран. Компилятор MV C++ 6.0 Вот прога:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <string>
#include <map>
 
using namespace std;
int main ()
{
    map <string, int> word_count;
    string word;
    while (cin>>word)
        ++word_count[word];
 
    map <string, int>::iteratormap_it = word_count.begin();
    cout<< map_it->first>>endl;
    cout<< map_it->second>>endl;
 
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2011, 17:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ассоциативный контейнер типа map (C++):

Передача в контейнер map пользовательского типа данных - C++
Доброго времени суток, дамы и господа. Интересует такая задачка: создать контейнер типа map, который будет хранить пользовательский тип...

Ассоциативный контейнер и шаблонный класс - C++
Помогите пожалуйста исправить и дополнить код. Задание: Автоматизированная информационная система на железнодорожном вокзале содержит...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

ассоциативный массив map c двумерным массивом - C++
Искал информацию в интернете но безрезультатно. Необходимо сделать ассоциативный массив с со строковым ключом и двумерным массивом 3х3 в...

Какой ассоциативный контейнер выбрать? И как реализовать в нем чтение из файла? - C++
Вот сама задание: Текстовый файл содержит следующую информацию: координату точки и угол наклона прямой, проходящей через эту точку....

ассоциативный массив MAP хранящий указатели на векторы определенной структуры - C++
вопрос: Если я создаю вектор, наполняю его данными и записываю указатель на него в MAP ,след шагом очищаю его. Я смогу обращаться к данному...

10
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.09.2011, 18:08 #2
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
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <string>
#include <map>
 
template< class Key, class Val >
struct print_pair {
    std::ostream& ost;
    
    print_pair(std::ostream& os) : ost(os) {}
 
    void operator () (const std::pair<Key, Val>& p)
    {
        ost << p.first << ": " << p.second << '\n';
    }
};
 
int main ()
{
    std::map< std::string, int > word_count;
    std::string word;
 
    while (std::cin >> word)
        ++word_count[word];
 
    std::for_each(word_count.begin()
                  , word_count.end()
                  , print_pair< std::string, int >(std::cout)
    );
    system("pause");
    return 0;
}
1
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
18.09.2011, 22:27  [ТС] #3
Спасибо! Ваша программа в отличие от моей откомпилировалась. Но она существенно сложнее для понимания новичку. Вы можете её прокомментировать. Я многих вещей не понимаю, особенно в начале кода
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.09.2011, 22:48 #4
новичкам негоже делать такое задание через std::map
0
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.09.2011, 23:41 #5
Romiys, ваша прога почти правильно работала
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <map>
 
int main ()
{
    std::map<std::string, int> word_count;
    std::string word;
    while (std::cin >> word)
        ++word_count[word];
 
    for (auto i = word_count.begin(), end = word_count.end(); i != end; ++i)
        std::cout << i->first << " : " << i->second << std::endl;
 
    system("Pause");        
    return 0;
}
чуть подправил

Jupiter, раз уж по трушному делать через функциональный объект, то надо от
C++
1
 std::unary_function<std::pair<Key, Val>, void>
наследовать по правилам)
2
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
19.09.2011, 11:03  [ТС] #6
Sandye51, спасибо Вам за ответ. Вечером домой приеду - прокомпилирую моя прога не компилировалась потому, что я в цыкле не написал "auto"?


Ответ для Jupiter : Вы говорите, что новичкам не гоже делать такое затание через std::map . Не понимаю почему? Моя главная задача не именно эту программу написать, а изучит и понять как работает на практике ассоциативный контейнер. Мне кажеться, что эта задача очень подходит для такой цели
0
LosAngeles
Заблокирован
19.09.2011, 11:26 #7
Romiys, учитывая
Цитата Сообщение от Romiys Посмотреть сообщение
Компилятор MV C++ 6.0
вариант сэнди можешь даже не пробовать
0
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
19.09.2011, 14:38  [ТС] #8
Почему???
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
19.09.2011, 14:51 #9
Romiys, Старый компилятор. А в коде используется стандарт С++11.
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
19.09.2011, 15:30 #10
Цитата Сообщение от Romiys Посмотреть сообщение
Почему???
Замени auto на std::map<std::string, int>::const_iterator и можешь пробовать.

Добавлено через 1 минуту
Цитата Сообщение от Romiys Посмотреть сообщение
моя прога не компилировалась потому, что я в цыкле не написал "auto"?
Нет. Потому что написал map <string, int>::iteratormap_it.
1
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
19.09.2011, 22:33  [ТС] #11
УРААА! Работает! Всем спасибо! Заработало! И написано понятно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <map>
 
int main ()
{
        std::map<std::string, int> word_count;
        std::string word;
        while (std::cin >> word)
                ++word_count[word];
 
        for (std::map<std::string, int>::const_iterator i = word_count.begin(), end = word_count.end(); i != end; ++i)
                std::cout << i->first << " : " << i->second << std::endl;
 
        system("Pause");        
        return 0;
}
P.S. А я ведь и не знал совсем, что VC++ 6.0 - это старый компилятор и тем более не догадывался, что прога написана на стандарте С++ 11
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2011, 22:33
Привет! Вот еще темы с ответами:

Контейнер map - C++
Cоздать ассоциативный список имен (ключей), телефонов. Осуществить поиск по именам. Дополнить его данным адрес. Добавить возможности...

Контейнер map - C++
в программе используется ассоциативный массив, идентификатором которого являются символы проблема в том что появляется элемент с...

Контейнер map - C++
Здравствуйте, работаю с контейнером map, анализирую текст, получаю записи типа &quot;слово: число его появлений в тексте&quot;. Хотелось бы вывести...

Контейнер map - C++
Стоит задача реализовать контейнер map. Вопрос возникает при реализации итератора для этого контейнера. В итераторе должны быть реализованы...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
19.09.2011, 22:33
Ответ Создать тему
Опции темы

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