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

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

06.03.2017, 19:32. Просмотров 159. Ответов 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;
    }
счетчик вроде увеличивается, но сравнения то нет нигде! Просто происходит перебор элементов, как тут сравнивается?
http://www.cyberforum.ru/cpp-beginners/thread953436.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2017, 19:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Объясните работу кода с использованием map (C++):

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

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

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

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

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

8
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,193
Завершенные тесты: 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
Сообщений: 354
Завершенные тесты: 1
06.03.2017, 20:41  [ТС] #3
Можно ли как-то сортировать map пару string-int, скажем по полю int?
0
Peoples
1269 / 774 / 730
Регистрация: 06.02.2016
Сообщений: 2,082
Записей в блоге: 15
Завершенные тесты: 4
06.03.2017, 20:42 #4
Zigfrid, скопировать map в vector<pair<string,int>> и там уже сортировать как угодно
0
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 354
Завершенные тесты: 1
06.03.2017, 20:43  [ТС] #5
блин, сложно
0
Peoples
1269 / 774 / 730
Регистрация: 06.02.2016
Сообщений: 2,082
Записей в блоге: 15
Завершенные тесты: 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
Сообщений: 354
Завершенные тесты: 1
06.03.2017, 20:49  [ТС] #7
m - это map?
В любом случае, не компилит.

И здесь же вроде просто сравниваются два вектора a и b?
0
Peoples
1269 / 774 / 730
Регистрация: 06.02.2016
Сообщений: 2,082
Записей в блоге: 15
Завершенные тесты: 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
Сообщений: 354
Завершенные тесты: 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
Привет! Вот еще темы с решениями:

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

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

Калькулятор с использованием библиотеки map
Нужно написать калькулятор с использованием библиотеки map и указателем на...

Вывод map через ostream_iterator с использованием алгоритма reverse_copy!!!
У меня есть два класса Time и Patient, я засунул их в map (ключ Time, значение...


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

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

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