Как работает 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 шт):
Для начала напишем на русском языке, что делает код функции BuildCharCounters - он натурально формирует статистику частот букв (сюда можно влезть с уточнением, при условии, что программа работает в однобайтовой кодировке).
Как он это делает?
Он проходит циклом по переданной строке (for (auto let : a) {) и каждую встреченную букву отправляет в map. Возможны два исхода:
- буква еще не встречалась - тогда в
mapсоздается новая запись, счетчик этой записи инициализируется нулем (см. дебри Стандарта языка), после чего ему делается инкремент - у нас появилась запись о том, что буква встретилась 1 раз - буква уже встречалась - счетчик увеличивается (умно говорить инкрементируется) еще на единичку.
В итоге мы получаем список букв в переданной строке, к каждой из которых приставлено количество повторений этой буквы.
Остальная же программа читает две строки, формирует для них статистики и сравнивает их между собой, выводя YES или NO в зависимости от того, совпали ли в точности статистики, или нет.