объясните код STL
Очень прошу объяснить данный код. Что конкретно делают функции for_each и for (по возможности объяснить построчно что происходит)
main.cpp
int main() {
map<string, set<string>> m1, m2, m3;
m1 = {
{"Ukraine", {"Kharkiv", "Kiev"}},
{"Russia", {"Moscow", "Belgorod"}},
{"Belarus", {"Minsk", "Bobruysk"}}
};
m2 = {
{"Poland", {"Warsaw"}},
{"Russia", {"Saint-Petersburg"}},
{"Ukraine", {"Kharkiv", "Zaporizhya"}}
};
m3 = m1;
for_each(m2.begin(), m2.end(), [&](const pair<string, set<string>> & pair) {
auto it = m3.find(pair.first);
if (it == m3.end())
m3.insert(pair);
else
it->second.insert(pair.second.begin(), pair.second.end());
});
for (map<string, set<string>> *m : array<map<string, set<string>>*, 3>{&m1, &m2, &m3}) {
cout << endl;
for (pair<string, set<string>> k : *m) {
cout << k.first << ": ";
for (string s : k.second)
cout << s << ", ";
cout << endl;
}
}
system("pause");
return 0;
}
Ответы (1 шт):
std::for_each - это функция из библиотеки алгоритмов.
Её смысл - пройтись по всем элементам контейнера(массиву, например) и применить к каждому элементу функтор
В данном случае в качестве контейнера выступает std::map(ассоциативный массив), а функтором - лямбда(безымянная функция)
Смысл этого участка кода - слияние(merge) двух std::map в третий
Сейчас этот std::for_each можно заменить на range-for - цикл for по контейнеру.
range-for как раз применен во втором непонятном для Вас участке кода.
range-for как и std::for_each пробегается по всем элементам контейнера и выполняет какие то действия.
В данном случае происходит вывод на печать для каждого элемента из списка {&m1, &m2, &m3}