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

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

Войти
Регистрация
Восстановить пароль
 
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 349
Завершенные тесты: 1
#1

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

06.03.2017, 19:32. Просмотров 143. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните работу кода с использованием map (C++):

Объясните работу кода - C++
Здравствуйте, не могу понять работу следующего кода: #include &lt;iostream&gt; using namespace std; int main() { char buff =...

Объясните пожалуйста работу кода - C++
#include &lt;iostream&gt; struct A{ int data; int data2; }; int main(int argc, const char * argv) {

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

Объясните работу кода с std::nested_exception - C++
привет, можете пожалуйста объяснить, почему вывод этого кода: http://en.cppreference.com/w/cpp/error/nested_exception #include...

Объясните код заполнения контейнера map - C++
1) помогите разобраться в коде, вот отрывок: for(i=0; i&lt;m; i++) { mymap.insert( make_pair((y * powmod(a, i, p) ) % p, i) ); ...

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

8
zss
Модератор
Эксперт С++
6634 / 6196 / 2051
Регистрация: 18.12.2011
Сообщений: 16,155
Завершенные тесты: 1
06.03.2017, 19:41 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Zigfrid Посмотреть сообщение
words[word]++;
Вот это работает так:
Если слова еще не было, то оно записывается в map, причем первым элементом пары оказывается это слово, а вторым нуль, который потом увеличивается на 1.
Если слово уже было, то просто второй элемент увеличивается на 1.
Для подсчета общего числа слов достаточно сложить эти вторые элементы, т.е
Цитата Сообщение от Zigfrid Посмотреть сообщение
count+=(*cur).second;
1
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 349
Завершенные тесты: 1
06.03.2017, 20:41  [ТС] #3
Можно ли как-то сортировать map пару string-int, скажем по полю int?
0
Peoples
1186 / 691 / 434
Регистрация: 06.02.2016
Сообщений: 1,818
Записей в блоге: 14
Завершенные тесты: 4
06.03.2017, 20:42 #4
Zigfrid, скопировать map в vector<pair<string,int>> и там уже сортировать как угодно
0
Zigfrid
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 349
Завершенные тесты: 1
06.03.2017, 20:43  [ТС] #5
блин, сложно
0
Peoples
1186 / 691 / 434
Регистрация: 06.02.2016
Сообщений: 1,818
Записей в блоге: 14
Завершенные тесты: 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
Сообщений: 349
Завершенные тесты: 1
06.03.2017, 20:49  [ТС] #7
m - это map?
В любом случае, не компилит.

И здесь же вроде просто сравниваются два вектора a и b?
0
Peoples
1186 / 691 / 434
Регистрация: 06.02.2016
Сообщений: 1,818
Записей в блоге: 14
Завершенные тесты: 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
Сообщений: 349
Завершенные тесты: 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 - C++
Нужно написать калькулятор с использованием библиотеки map и указателем на функцию void plusx( double a, double b) { cout &lt;&lt;...

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

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

Объясните работу указателя - C++
Зарание спасибо ) Короче дело было так ): Помог мне друг в проге, работать то работает а вот на защите заали мне вопросик из кода...


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

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

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