Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73

Map и string

22.04.2015, 15:14. Показов 6504. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые программисты!

Прошу вас, пояснить пожалуйста следующий код :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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]++;
    }
.......

Скажите пожалуйста, что значит вот это :

C++
1
words[word]++;
?

Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.04.2015, 15:14
Ответы с готовыми решениями:

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ?
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...

Запись значения в map<string, map<string,string>>
Как корректно записать значение в map&lt;string, map&lt;string,string&gt;&gt;? Добавлено через 27 минут Забыл добавить. Не создавая кучу других...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string,...

26
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
22.04.2015, 20:27
Студворк — интернет-сервис помощи студентам
И если что, этот код кривой, который
https://www.cyberforum.ru/post7515250.html
он не учитывает, что, например, слово может быть внутри скобок, поэтому

привет (привет) будет растрактовано как
привет 1 раз
(привет) 1 раз

Зубри массивы
1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 21:06  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
А что вас собственно в этой записи смущает?
Чем число -5 хуже чем число 2?
Получается, что [-5], это значение ? т.е. ключ, по которому имеется какая-то запись ? Здесь это не означает тоже самое, что и в классических массива?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.04.2015, 21:15

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
Зубри массивы
зубрить вообще не надо.



Цитата Сообщение от NewBi Посмотреть сообщение
Получается, что [-5], это значение ?
-5 <- индекс
[-5] <- обращение к элементу по индексу

Цитата Сообщение от NewBi Посмотреть сообщение
т.е. ключ, по которому имеется какая-то запись ?
верно,запустите код и убедитесь.

Цитата Сообщение от NewBi Посмотреть сообщение
Здесь это не означает тоже самое, что и в классических массива?
Принцип тот-же.Только в классических массивах отрицательный индекс лучше не писать.Так как там, он определяет смещение элемента относительно адреса нулевого.Лучше читайте учебник:
Литература C++
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
22.04.2015, 21:20
Лучший ответ Сообщение было отмечено NewBi как решение

Решение

Цитата Сообщение от NewBi Посмотреть сообщение
C++
1
2
3
4
5
6
7
map <string,int> words;//1
 ifstream in;   //Объявил переменную in, тип которой ifstream
    in.open("in.txt"); //открыл файл in.txt
    string word;       //Создал переменную word, обозначающую прочитанное слово
   while (in>>word) {  //До тех пор, пора в поток in приходит что-то из файла, выполняется цикл
     words[word]++;   //Если то, что пришло уже встречалось, см. ниже.
   }
1. map <string,int> words;
Создается ассоциативный контейнер map
В параметрах контейнера указывают, что все индексы этого контейнера ,будут как строки string, а все значения будут типа int
То, что здесь string - это ключ (имя индекса массива)
В обычных массивах идет числовая нумерация, а тут вот в map осмысленные имена. При этом этот ключ может быть абсолютно любого типа, хоть число, хоть строка, хоть собственный класс. Число без разницы какое, отрицательное, дробное. Любое вообще. Вообще любого типа ключ.

2. Если из файла пришло то, что уже встречалось, то тогда происходит
words[words]=words[words]+1; //words[words] уже существует, поэтому именно он и увеличивается.

Если для map не задать именованный индекс, то при обращении к такому несуществующему индексу, там будет ноль, поэтому тут такая вот конструкция, создающая именованный индекс и увеличивающая тот самый ноль который был в несуществующем элементе, потом уже увеличивающая то, что там дальше.

А при работе с файлом, >> это такой оператор, который считывает данные до первого пробела и так по очереди. При этом он пробелы не считывает, а всякую ерунду типа знаков препинания считывает как будто бы это часть слова.

Поэтому этот пример, кочующий по интернету из материалов про map кривой и неправильный. Поэтому ему либо использовать чужие кривые примеры, либо понять откуда ноги растут и научиться видеть подводные камни и не повторять чужих ошибок.

Все это сообщение адресовано только к ТС
1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 21:27  [ТС]
Кажется начинает доходить!!

Если я правильно понимаю, то вся суть в следующем: В моем примере map<string,int>,т.е. мы ключу (string) присваиваем переменную именно string, какую-то строку, а int,тут выступает в роли счетчика.
Правильно?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
22.04.2015, 21:58
Лучший ответ Сообщение было отмечено NewBi как решение

Решение

Да. Только ключ не совсем строка. Это то, что пришло из файла. Скорее это часть строки.
А значение тут - это значение счетчика.
Счетчик здесь - это map <string,int> words;
______________________
map <string,int> words; //ТИП
map <string,int> words; //КЛЮЧ, в примере это слово, но правильнее часть строки.
map <string,int> words; //ЗНАЧЕНИЕ или значение счетчика, а не счетчик
map <string,int> words; //Счетчик скорее вот так. Контейнер со значением, тип которого int
map <string,int> words; //Сам контейнер map
1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 22:06  [ТС]
Да, кажется начинаю понимать, нужно больше практики.

Хочу выразить огромную благодарность всем кто помогал!!! Особенно хочу отметить советы и помощь пользователей S_el и daslex, СПАСИБО !!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2015, 22:06

Работа с map<string, map<string, string>>
Всем привет! Что-то запарился в неожиданном месте... Есть тип данных, который выглядит так: map&lt;string,...

Как перебрать все элементы в map<string, vector<string>>
Доброго времени суток. Решаю следующую задачу: В файле есть сведения об автомобилях: марка автомобиля, номер и фамилия владельца. ...

Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные?
Добрый день, подскажите, есть ли аналог Map &lt;String,String&gt; чтобы передавать его как указатель на данные? Заранее спасибо!

Вывод содержимого map<string, set<string>>
Необходимо реализовать серверную часть словарика синонимов, где внесение синонимов имеет формат 'Set &lt;Word1&gt; &lt;Word2&gt;', а вывод...

Сохранение/чтение map<string,string*> в файл
Доброго времени суток, Нужно сделать БД для индексации содержимого текстовых файлов, сначала решил, что все просто: читаем файл и...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru