mansigpt's blog

By mansigpt, history, 4 years ago, In English

Code Problem  As you can see I am trying to update map second (of pair) but it is not getting updated. As these are the results of debug.

Also tell tips or link to tutorial about pair map combined use for complex cases as it is very helpfull

Thanks

  • Vote: I like it
  • -3
  • Vote: I do not like it

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by mansigpt (previous revision, new revision, compare).

  • »
    »
    4 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    though map size is 1 still z.Second++ is unable to update it. I too don't don't get it.

    • »
      »
      »
      4 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      auto creates copy so use this to update I think this may be the issue not completely sure though m[{(z.F.F),(z.F.S)}]++;

»
4 years ago, # |
  Vote: I like it +12 Vote: I do not like it

try passing by reference:

for (auto& z : m) { ... }

Right now z is just a copy of the pair in the map. In general, in the code

for (auto x : v) { ... }

each x will be a copy of an element in v, and changes to x won't be reflected in v. Maybe read about references somewhere to learn more details.

»
4 years ago, # |
  Vote: I like it +3 Vote: I do not like it

In range-based loops

  • Using for (auto x : container) mean you doing with copy of x and it is changable (but not the variable in the container)
  • Using for (auto &x : container) mean you doing with reference of x and it is changable
  • Using for (const auto x : container) mean you doing with copy of x and it is unchangable
  • Using for (const auto &x : container) mean you doing with reference of x and it is unchanable

If you use large container and not want to change it, you should use for (const auto &x : container) since it wont have to waste time on creating copies then detroys them

If you want the variable to be changable, you should use for (auto &x : container)