Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpPmRfML 309 of 390 menu
◀ ▶

Ссылка в цикле словаря в C++

Копия пары в цикле не меняет словарь. Ключ пары берут из first, значение из second. Запишем цикл по копии и выведем значение ключа "a":

#include <iostream> #include <map> #include <string> int main() { std::map<std::string, int> obj = {{"a", 1}, {"b", 2}, {"c", 3}}; for (auto elem : obj) { elem.second += 1; } std::cout << obj["a"] << "\n"; // выведет 1 return 0; }

Если переменная цикла - ссылка, запись в second меняет значение в словаре. Ключ при этом не меняют. Запишем тот же цикл со ссылкой:

#include <iostream> #include <map> #include <string> int main() { std::map<std::string, int> obj = {{"a", 1}, {"b", 2}, {"c", 3}}; for (auto& elem : obj) { elem.second += 1; } std::cout << obj["a"] << "\n"; // выведет 2 return 0; }

Исправьте код так, чтобы значения словаря изменились.

#include <iostream> #include <map> #include <string> int main() { std::map<std::string, int> obj = {{"x", 1}, {"y", 2}}; for (auto elem : obj) { elem.second = elem.second * elem.second; } std::cout << obj["x"] << "\n"; return 0; }

Исправьте код так, чтобы значения словаря изменились.

#include <iostream> #include <map> #include <string> int main() { std::map<std::string, std::string> obj = {{"de", "Berlin"}, {"fr", "Paris"}}; for (auto elem : obj) { elem.second += "!"; } std::cout << obj["de"] << "\n"; return 0; }
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить