Maps associate keys with values, so repeated updates can accumulate a count for one key.

map A `std::map` stores key-value pairs ordered by key.
keyed update Using `counts[key]` creates a value when the key is missing and then lets the program update it.

Map Count Update

item
map_count_update.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <map>
#include <string>

int main() {
    std::string item = "apple";

    std::map<std::string, int> counts;
    counts[item] += 1;
    counts[item] += 1;

    int count = counts[item];

    std::cout << "item=" << item << std::endl;
    std::cout << "count=" << count << std::endl;
    return 0;
}
#include <iostream>
#include <map>
#include <string>

int main() {
    std::string item = "pear";

    std::map<std::string, int> counts;
    counts[item] += 1;
    counts[item] += 1;

    int count = counts[item];

    std::cout << "item=" << item << std::endl;
    std::cout << "count=" << count << std::endl;
    return 0;
}
  1. item ← apple, counts ← (empty), count ← 2

    5int main() {6    std::string item→ apple = "apple"; //@item="pear", "apple"78    std::map<std::string, int> counts→ (empty);9    counts(empty)[itemapple] += 1;10    counts(empty)[itemapple] += 1;1112    int count→ 2 = counts(empty)[itemapple];1314    std::cout << "item=" << itemapple << std::endl;15    std::cout << "count=" << count2 << std::endl;16    return 0;17}
    outputitem=apple
    count=2
  1. item ← pear, counts ← (empty), count ← 2

    5int main() {6    std::string item→ pear = "pear";78    std::map<std::string, int> counts→ (empty);9    counts(empty)[itempear] += 1;10    counts(empty)[itempear] += 1;1112    int count→ 2 = counts(empty)[itempear];1314    std::cout << "item=" << itempear << std::endl;15    std::cout << "count=" << count2 << std::endl;16    return 0;17}
    outputitem=pear
    count=2