Как работает map c++?

я только начинаю обучаться. Не понимаю как работает map. Как работает этот код? Как сравнивается первое слово со вторым, если в функцию поступает одно слово?

    map<char, int> BuildCharCounters(const string& a) {
map<char, int> res;
for (auto let : a) {
    res[let]++;
}
return res;
}

    int main() {
int n;
cin >> n;

for (int i = 0; i < n; ++i) {
    string first_word, second_word;
    cin >> first_word >> second_word;
    if (BuildCharCounters(first_word) == BuildCharCounters(second_word)) {
        cout << "YES"s << endl;
    }
    else {
        cout << "NO"s << endl;
    }
}

return 0;
}

Ответы (1 шт):

Автор решения: gbg

Для начала напишем на русском языке, что делает код функции BuildCharCounters - он натурально формирует статистику частот букв (сюда можно влезть с уточнением, при условии, что программа работает в однобайтовой кодировке).

Как он это делает?

Он проходит циклом по переданной строке (for (auto let : a) {) и каждую встреченную букву отправляет в map. Возможны два исхода:

  • буква еще не встречалась - тогда в map создается новая запись, счетчик этой записи инициализируется нулем (см. дебри Стандарта языка), после чего ему делается инкремент - у нас появилась запись о том, что буква встретилась 1 раз
  • буква уже встречалась - счетчик увеличивается (умно говорить инкрементируется) еще на единичку.

В итоге мы получаем список букв в переданной строке, к каждой из которых приставлено количество повторений этой буквы.

Остальная же программа читает две строки, формирует для них статистики и сравнивает их между собой, выводя YES или NO в зависимости от того, совпали ли в точности статистики, или нет.

→ Ссылка