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

Map и string

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

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

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

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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2015, 15:14
Ответы с готовыми решениями:

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

Запись значения в 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,...

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

26
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
22.04.2015, 15:17 2
NewBi, это значит постинкремент содержимого words по ключу word, то есть увеличение его на 1.
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
22.04.2015, 15:20 3
Цитата Сообщение от NewBi Посмотреть сообщение
Скажите пожалуйста, что значит вот это :
words <- имя переменной
[word] <- обращение к элементу по ключу
++ <- операция инкремента.

Сложите все вместе и получите,что значение соответствующее указанному ключу увеличивается на 1.
1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 15:31  [ТС] 4
Т.е. мы переменной words присваиваем переменную word по ключу и инкремируем перенную words ??
А второе значение (int), будет увеличиваться автоматически? По мере прибавления ключей ?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.04.2015, 15:33 5
А если более абстрактно - увеличение счётчика количества слов word в файле на 1.
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
22.04.2015, 15:37 6
Words:

key : value
----------------------
"cats" : 1
"dogs" : 5
"rabbits" : 9

C++
1
words["rabbits"]++
приведет к значению 10 в words["rabbits"].

проверьте это, выведя в консоль с помощью std::cout << words["rabbits"]

Не по теме:

( или words.at("rabbits") (c++11))

1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 15:56  [ТС] 7
Если честно, ещё больше запутался...
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
22.04.2015, 16:03 8
NewBi, если ты не изучал мапы, то естественно запутался. Не прыгай выше головы.
Изучай сначала базовые структуры данных и алгоритмы.
например, массивы
циклы, условия
и уже с ними сам вручную делай счётчик слов в файле.
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
22.04.2015, 16:06 9
Цитата Сообщение от NewBi Посмотреть сообщение
Если честно, ещё больше запутался...
Так а что вам осталось непонятно?
1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 18:10  [ТС] 10
Цитата Сообщение от S_el Посмотреть сообщение
Так а что вам осталось непонятно?
Просто не могу понять, мы как бы обращаемся по индексу к переменной words??

Т.е. мы к переменной words (map) присваиваем переменную word (string),а переменную word инициализируем каким-то значением, к примеру "hello", потом мы по индексу присваиваем этот word(string) мапу words, и потом инкремируем переменную words (map), таким образом получается что в переменной(массиве) words (map) первое значение будет ("hello",1) ... и после инкремента, уже обращаемся к второму значению?? Я прав???
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,671
22.04.2015, 18:51 11
map работает как массив, только в качестве индексов используются слова. Если три раза будет слово hello, то получится ("hello", 3).
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
22.04.2015, 18:55 12
Лучший ответ Сообщение было отмечено NewBi как решение

Решение

Цитата Сообщение от NewBi Посмотреть сообщение
Просто не могу понять, мы как бы обращаемся по индексу к переменной words??
Можете считать что map это массив,только индекс не числовой а такой,какой указан первым параметром шаблона.

Цитата Сообщение от NewBi Посмотреть сообщение
Я прав??
не совсем.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <map>
#include <fstream>
using namespace std;
 
int main() {
    map <string,int> words;
    words["one"]=1;
    words["two"]=2;
    words["three"]++;
    for(auto i:words)
    cout<<"key  "<<i.first<<"    value  "<<i.second<<endl;
    return 0;
}
только в вашем случае ключи(индексы) считываются из файла.
1
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
22.04.2015, 19:32 13
S_el, моё мнение прежнее, программа должна соответствовать твоим знаниям. Если ты напишешь программу без использования мап, это будет по-честному. Тебе задали задачку, не для того, чтобы брать готовое решение на форуме со структурами данных, которых ты не знаешь.
Наоборот, я уверен, вы в школе недавно прошли темы "массивы" и "строки" и по этим темам вам задали домашку.
Вот и решай её с массивами и строками, точнее спрашивай тут её, на основе известного тебе материала.
Я уверен, учительница хотела, чтобы ты именно продемонстрировал алгоритм подсчёта строк, а не то, как создатели СТЛ его знают.
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
22.04.2015, 19:37 14
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я уверен, учительница хотела, чтобы ты именно продемонстрировал алгоритм подсчёта строк, а не то, как создатели СТЛ его знают.
Не знаю что хотела учительница,а то,что ТС пытается освоить новый материал - хорошо.Но я с вами соглашусь - знания надо наращивать постепенно.

Не по теме:

Kuzia domovenok, вы меня перепутали с ТС :)

1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 19:39  [ТС] 15
Т.е. если представить переменную words, как простой массив int, то к примеру, words[1]=5, будет означать что мы элементу массива words, под индексом 1, присваиваем значение 5.
Тогда в map'e у нас вместо числовых индексов идут индексы которые мы указали (string), и мы, вот этим,
Цитата Сообщение от S_el Посмотреть сообщение
words["one"]=1;
присваиваем индексу ["one"], значение 1?

Извиняюсь если замучил уже
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
22.04.2015, 19:44 16
Лучший ответ Сообщение было отмечено NewBi как решение

Решение

Цитата Сообщение от NewBi Посмотреть сообщение
присваиваем индексу ["one"], значение 1?
Не индексу,а элементу.Индекс однозначно определяет элемент контейнера.

Цитата Сообщение от NewBi Посмотреть сообщение
Тогда в map'e у нас вместо числовых индексов идут индексы которые мы указали (string)
Да.Но ключ может быть и другим типом.Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <map>
#include <fstream>
using namespace std;
 
int main() {
    map <int,string> words;
    words[2]="str";
    words[-5]="2";
    //words[-1]++; не скомпилируется
    for(auto i:words)
    cout<<"key  "<<i.first<<"    value  "<<i.second<<endl;
    return 0;
}

Не по теме:

Цитата Сообщение от NewBi Посмотреть сообщение
Извиняюсь если замучил уже
Да ничего.Поверьте такие темы меня радуют намного больше,чем классические:
"решите за меня тривиальную задачку - я не умею пользоваться поиском и ни черта не смыслю в ваших С++"

1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
22.04.2015, 20:01  [ТС] 17
S_el, кажется я начинаю понимать по-тихоньку, а тогда операция инкремент означает, что, элементу массива words["one"] мы присвоили значение 1, а теперь уже ссылаемся на следующий элемент ??Как в обычных массивах ?

И как мы
Цитата Сообщение от S_el Посмотреть сообщение
words[-5]="2";
, вот этому можем присвоить значение, если индекс (-5)?

Kuzia domovenok, Прошу прощения если Вас сильно нагрузил, я просто для себя хотел понять эту тему. В любом случае, спасибо за Ваши советы и Вашу помощь!
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
22.04.2015, 20:07 18
Цитата Сообщение от NewBi Посмотреть сообщение
а тогда операция инкремент означает
операция инкремент означает тоже что и всегда.Вы обратились к элементу и увеличили его значение на 1.Чаще выводите на консоль различные сообщения(или смотрите в отладчике) и тогда вам будет намного проще разобраться.

Цитата Сообщение от NewBi Посмотреть сообщение
вот этому можем присвоить значение, если индекс (-5)?
А что вас собственно в этой записи смущает?
Чем число -5 хуже чем число 2?
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
22.04.2015, 20:21 19
Сейчас не разобравшись с массивами, но разобравшись с map и поняв, что -5 ничем не хуже чем 2, потом может аукнутся в применении отрицательных индексов в массивах. А чё, - ничем не хуже чем +.
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
22.04.2015, 20:27 20
Цитата Сообщение от daslex Посмотреть сообщение
потом может аукнутся в применении отрицательных индексов в массивах.
Может,но тогда этот вопрос тоже разрешиться и не всплывет в дальнейшем.
1
22.04.2015, 20:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2015, 20:27
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru