Почему значения моей карты сбрасываются после выхода из цикла - PullRequest
1 голос
/ 07 мая 2020

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

for (auto i : monthly_volumes) {
            i.second = get_monthly_volume(i.first, year);
            cout << "Month check during loop" << i.first << ":" << i.second << endl;
        }

        for (auto i : monthly_volumes) {
            //i.second = get_monthly_volume(i.first, year);
            cout << "Month Check After loop" << i.first << ":" << i.second << endl;
        }

Это Вывод кода

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вам нужно пройти по карте со ссылкой, например:

for (auto &i : monthly_volumes) 
  // changes to i, changes monthly_volumes

Кроме того, в C ++ 17 вы можете использовать структурированные привязки, чтобы облегчить чтение кода:

for (auto &[k, v] : monthly_volumes) {
    v = get_monthly_volume(k, year);
    cout << "Month check during loop" << k << ":" << v << endl;
}
0 голосов
/ 07 мая 2020

Вам нужна ссылка на записи карты, чтобы изменить их. Ваш код изменяет копию записи на карте.

for (auto& i : monthly_volumes) {
        i.second = get_monthly_volume(i.first, year);
        cout << "Month check during loop" << i.first << ":" << i.second << endl;
    }
...