Блог пользователя mansigpt

Автор mansigpt, история, 4 года назад, По-английски

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

  • Проголосовать: нравится
  • -3
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

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

    • »
      »
      »
      4 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      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 года назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

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 года назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

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)