Ссылка в цикле словаря в 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;
}