Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 358
Завершенные тесты: 1
1

Объясните работу кода с использованием map

06.03.2017, 19:32. Просмотров 770. Ответов 8
Метки нет (Все метки)

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
34
35
36
37
38
#include <iostream>
#include <string>
#include <map>
#include <fstream>
 
using namespace std;
 
int main()
    {
    map <string,int> words;
    
    ifstream in;
    in.open("in.txt");
    
    string word;
    
    while (in>>word)
    {
        words[word]++;
    }
    
    ofstream out;
    out.open("out.txt");
    
    int count = 0;
    
    map <string,int>::iterator cur;
    
    out<<"Words count:"<<endl;
    
    for (cur=words.begin();cur!=words.end();cur++)
    {
        out<<(*cur).first<<": "<<(*cur).second<<endl;
                count+=(*cur).second;
    }
 
    return 0;
}
Программа считает количество слов, которые входят в файл.
Пример взят вот отсюда.
Не понимаю, каким образом происходит подсчет слов. вот здесь:

C++
1
2
3
4
5
for (cur=words.begin();cur!=words.end();cur++)
    {
        out<<(*cur).first<<": "<<(*cur).second<<endl;
                count+=(*cur).second;
    }
счетчик вроде увеличивается, но сравнения то нет нигде! Просто происходит перебор элементов, как тут сравнивается?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2017, 19:32
Ответы с готовыми решениями:

Объясните работу кода
Здравствуйте, не могу понять работу следующего кода: #include &lt;iostream&gt;...

Объясните работу строки кода
как работает это строка? что она делает? и зачем сравнивается с 0? задача...

Объясните пожалуйста работу кода
#include &lt;iostream&gt; struct A{ int data; int data2; }; int...

Объясните работу кода с std::nested_exception
привет, можете пожалуйста объяснить, почему вывод этого кода:...

Объясните работу кода с перегрузкой операторов
Здравствуйте Код: #include &lt;iostream&gt; using namespace std; class A {...

8
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
06.03.2017, 19:41 2
Лучший ответ Сообщение было отмечено Zigfrid как решение

Решение

Цитата Сообщение от Zigfrid Посмотреть сообщение
words[word]++;
Вот это работает так:
Если слова еще не было, то оно записывается в map, причем первым элементом пары оказывается это слово, а вторым нуль, который потом увеличивается на 1.
Если слово уже было, то просто второй элемент увеличивается на 1.
Для подсчета общего числа слов достаточно сложить эти вторые элементы, т.е
Цитата Сообщение от Zigfrid Посмотреть сообщение
count+=(*cur).second;
1
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 358
Завершенные тесты: 1
06.03.2017, 20:41  [ТС] 3
Можно ли как-то сортировать map пару string-int, скажем по полю int?
0
Peoples
1347 / 836 / 749
Регистрация: 06.02.2016
Сообщений: 2,228
Записей в блоге: 17
Завершенные тесты: 4
06.03.2017, 20:42 4
Zigfrid, скопировать map в vector<pair<string,int>> и там уже сортировать как угодно
0
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 358
Завершенные тесты: 1
06.03.2017, 20:43  [ТС] 5
блин, сложно
0
Peoples
1347 / 836 / 749
Регистрация: 06.02.2016
Сообщений: 2,228
Записей в блоге: 17
Завершенные тесты: 4
06.03.2017, 20:45 6
Ну и Boost.Bimap ещё есть. Там можно и по значению сортировать

Добавлено через 2 минуты
Zigfrid,
C++
1
2
3
4
vector<pair<string,int>> v(m.begin(),m.end());
sort(v.begin(),v.end(),[](const pair<string,int> &a, const pair<string,int> &b){
        return a.second<b.second;
}
1
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 358
Завершенные тесты: 1
06.03.2017, 20:49  [ТС] 7
m - это map?
В любом случае, не компилит.

И здесь же вроде просто сравниваются два вектора a и b?
0
Peoples
1347 / 836 / 749
Регистрация: 06.02.2016
Сообщений: 2,228
Записей в блоге: 17
Завершенные тесты: 4
06.03.2017, 20:59 8
Zigfrid, да, map

Добавлено через 34 секунды
Zigfrid,
Цитата Сообщение от Peoples Посмотреть сообщение
(const pair<string,int> &a, const pair<string,int> &b)
Добавлено через 3 минуты
Скобку забыл тут
C++
1
2
3
sort(v.begin(),v.end(),[](const pair<string,int> &a, const pair<string,int> &b){
        return a.second<b.second;
});
1
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 358
Завершенные тесты: 1
06.03.2017, 21:00  [ТС] 9
Да, я уже понял) спасибо!
0
06.03.2017, 21:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2017, 21:00

Объясните код заполнения контейнера map
1) помогите разобраться в коде, вот отрывок: for(i=0; i&lt;m; i++) { ...

Объясните пример с decltype, инициализацией контейнера map, по работе for_each и copy
template&lt;class T, class U&gt; auto hellSum(const T&amp; x, const U&amp; y) -&gt;...

Создать словарь с использованием map
Вот задание: Входные данные В первой строке содержится единственное целое...


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

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

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