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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.63
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
18.09.2011, 17:46     Ассоциативный контейнер типа map #1
Привет! Помогите пожалуйста найти ошибку. Программа с Ассоциативным контейнером типа 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.09.2011, 18:08     Ассоциативный контейнер типа map #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;
}
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
18.09.2011, 22:27  [ТС]     Ассоциативный контейнер типа map #3
Спасибо! Ваша программа в отличие от моей откомпилировалась. Но она существенно сложнее для понимания новичку. Вы можете её прокомментировать. Я многих вещей не понимаю, особенно в начале кода
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.09.2011, 22:48     Ассоциативный контейнер типа map #4
новичкам негоже делать такое задание через std::map
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.09.2011, 23:41     Ассоциативный контейнер типа map #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>
наследовать по правилам)
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
19.09.2011, 11:03  [ТС]     Ассоциативный контейнер типа map #6
Sandye51, спасибо Вам за ответ. Вечером домой приеду - прокомпилирую моя прога не компилировалась потому, что я в цыкле не написал "auto"?


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

Добавлено через 1 минуту
Цитата Сообщение от Romiys Посмотреть сообщение
моя прога не компилировалась потому, что я в цыкле не написал "auto"?
Нет. Потому что написал map <string, int>::iteratormap_it.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2011, 22:33     Ассоциативный контейнер типа map
Еще ссылки по теме:

Ассоциативный контейнер и шаблонный класс C++
C++ Контейнер map
C++ Контейнер map

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

Или воспользуйтесь поиском по форуму:
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
19.09.2011, 22:33  [ТС]     Ассоциативный контейнер типа map #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
Yandex
Объявления
19.09.2011, 22:33     Ассоциативный контейнер типа map
Ответ Создать тему
Опции темы

Текущее время: 20:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru