Почему значение в карте STL не меняется? - PullRequest
0 голосов
/ 22 мая 2018

Я вычитаю значение на карте (пара ключ-значение) на 1, если значение больше 1

#include <bits/stdc++.h>
using namespace std;
int main()
{
     // Creating a map with 4 element
    map<int,int> m;
    m[1]=1;
    m[2]=2;
    m[3]=1;
    m[4]=3;
     //Printing the output
    for(auto x: m)cout<<x.first<<" "<<x.second<<endl;
    //Applying substraction
    for(auto x: m)
    {
        if(x.second>1)
        {
            x.second--;
        }
    }
    cout<<"After subtraction operation: \n";
    for(auto x: m)cout<<x.first<<" "<<x.second<<endl;

}

Output

1 Ответ

0 голосов
/ 22 мая 2018

auto использует те же правила для вывода типов, что и шаблоны, и они предпочитают типы значений, а не ссылочные типы.Итак:

for (auto x : m)

эквивалентно:

for (std::map<int,int>::value_type x : m)

, и это создает копию ключа и значения.Затем вы изменяете копию, и ничто в реальной карте не изменяется.Вам нужно:

for (auto& x : m)

(или, если вы действительно мазохист):

for (std::map<int,int>::value_type& x : m)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...