Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/20: Рейтинг темы: голосов - 20, средняя оценка - 4.70
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
1

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

18.09.2011, 17:46. Показов 3573. Ответов 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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2011, 17:46
Ответы с готовыми решениями:

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

Ассоциативный контейнер std::map с кириллицей
Всем привет! Никак не могу разобраться каким способом решить интересную проблему. В ассоциативном...

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

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

10
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
18.09.2011, 22:27  [ТС] 3
Спасибо! Ваша программа в отличие от моей откомпилировалась. Но она существенно сложнее для понимания новичку. Вы можете её прокомментировать. Я многих вещей не понимаю, особенно в начале кода
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
18.09.2011, 22:48 4
новичкам негоже делать такое задание через std::map
0
программист С++
841 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
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
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
19.09.2011, 11:03  [ТС] 6
Sandye51, спасибо Вам за ответ. Вечером домой приеду - прокомпилирую моя прога не компилировалась потому, что я в цыкле не написал "auto"?


Ответ для Jupiter : Вы говорите, что новичкам не гоже делать такое затание через std::map . Не понимаю почему? Моя главная задача не именно эту программу написать, а изучит и понять как работает на практике ассоциативный контейнер. Мне кажеться, что эта задача очень подходит для такой цели
0
Заблокирован
19.09.2011, 11:26 7
Romiys, учитывая
Цитата Сообщение от Romiys Посмотреть сообщение
Компилятор MV C++ 6.0
вариант сэнди можешь даже не пробовать
0
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
19.09.2011, 14:38  [ТС] 8
Почему???
0
В астрале
Эксперт С++
8033 / 4790 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.09.2011, 14:51 9
Romiys, Старый компилятор. А в коде используется стандарт С++11.
1
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2011, 22:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

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


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

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

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