Start learning free

LESSON 162 OF 409 · PROJECTS: EVERYDAY PROGRAMS

Shopping Cart V6 - Group by Category in C++

Practice

Use a map to accumulate totals per category while looping over parallel vectors, then list the categories sorted by name.

You start with:

vector<string> items = {"Apple", "Bread", "Shirt", "Banana", "Pants"};
vector<int> prices = {2, 3, 25, 1, 40};
vector<string> categories = {"Food", "Food", "Clothes", "Food", "Clothes"};

Build:

Clothes: $65
Food: $6

Rules:

  • Build a map totals that maps each category to the sum of the prices of its items.
  • Loop with an index. For each item, add its price to the total of categories[i]; a category you have not seen yet counts as 0.
  • Make one line per category, in the format "Category: $total", sorted alphabetically by category name (so Clothes comes before Food).
  • Join the lines with a newline "\n" into one string result, then print it with cout << result << endl.

A map<string, int> starts every new key at 0, so totals[cat] = totals[cat] + prices[i] just works.

A map iterates in sorted key order automatically, so no extra sorting is needed.

vector<string> items = {"Apple", "Bread", "Shirt", "Banana", "Pants"};
vector<int> prices = {2, 3, 25, 1, 40};
vector<string> categories = {"Food", "Food", "Clothes", "Food", "Clothes"};

map<string, int> totals;
for (int i = 0; i < (int)items.size(); i++) {
    string cat = categories[i];
    totals[cat] = totals[cat] + prices[i];
}
vector<string> lines;
for (auto &kv : totals) {
    lines.push_back(kv.first + ": $" + to_string(kv.second));
}
string result = "";
for (int i = 0; i < (int)lines.size(); i++) {
    if (i > 0) result += "\n";
    result += lines[i];
}
cout << result << endl;

STEP 1 OF 12
    Ctrl + Enter to check

    Shopping Cart V6 in C++

    Keep going with C++About 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free