Другие языки программирования и технологии

Всем доброго времени суток, я хотел бы узнать о контейнере map. Что он выполняет в данном коде? Заранее спасибо.

Зачем конкретно он нужен???
2 файла, в них слова. Вывести на экран все слова, которые есть в обоих файлах.
#include
#include
#include
#include
#include
#include
#include
using namespace std;

int main (int argc, argv) {
SetConsoleCP();
SetConsoleOutputCP();
char mas1[256], mas2[256];
int count1=0, count2=0;
ifstream f1 ("in1.txt");
ifstream f2 ("in2.txt");

map m;
string s;

while(f1 >> s)
++m[s];//1
// Moscow Kaliningrad London Paris Berlin
// Moscow London Paris Madrid
while (f2 >> s) {
++m[s];
if(m[s] > 1)
m[s] = 0;

}

{
f2.close ();
f1.close ();
}

system("pause");
return 0;
}
Я полагаю, он хранит количество слов по ключу, который этим словом и является.
Пожалуйста.
Акзат Ералы
Акзат Ералы
11 157
Лучший ответ
К конкретном коде он выполняет 2 функции:
1. Он сортирует названия по алфавиту
2. Он хранит в себе пары имя - идентификатор
...впрочем, как и в любом коде
В данном коде ничего, так как результат манипуляций с ним нигде не используется.
А сами манипуляции заключаются в увеличении целочисленного значения по строковому ключу. Но потом зачем-то обнуляется, если встречалось больше одного раза.
И еще, это работать не будет, так как учтет слово, несколько раз встречающееся в первом файле и ни разу во втором, что никак не соответствует объявленной задаче.
Контейнер map представляет собой одну из самых полезных структур данных, которая позволяет хранить объекты вида "Ключ-Значение" и проводить с ними разного рода манипуляции. Причем "Ключ" в объекте map будет уникальным. Карта вида map позволяет сохранить в себе какую-то строку string и привязать к ней значение int.
Если взять файл и начать его разбирать на отдельные слова, то при помощи такого контейнера можно легко подсчитать, сколько раз слово встречается в файле. Судя по строке ++m[s]; что-то подобное и пытался изобразить автор программы. Но зачем он после этого обнуляет счетчик для меня лично остается загадкой. Наверное это был Очень Глубокий Замысел, недоступный умам простых смертных. А может программист просто был под "веществами", когда ваял этот код.

Если у нас стоит задача вывести слова, которые присутствуют и в файле А, и в файле Б, то map в общем-то не нужен, хотя его тоже можно под это приспособить. Есть другая структура данных, называется set, которая просто хранит уникальные ключи (см cppstudio.com/post/9037/ ). Сделайте два объекта set, по одному на каждый файл, загрузите в них слова, а потом найдите их пересечение. Это и будет то, что вам надо.
Юрий Воеводов
Юрий Воеводов
9 624

Похожие вопросы