/*
 * Copyright ©2026 Soham Pardeshi. All rights reserved.
 * Permission is hereby granted to students registered for University of
 * Washington CSE 333 for use solely during Summer Quarter 2026 for
 * purposes of the course. No other use, copying, distribution, or
 * modification is permitted without prior written consent. Copyrights
 * for third-party components of this work must be honored. Instructors
 * interested in reusing these course materials should contact the author.
 */

#include <iostream>
#include <map>
#include <string>
#include <vector>

using std::cout;
using std::endl;

// STL Example #2 (slide 64): count word frequencies with a map.  freq[w]++
// works because operator[] inserts a value-initialized 0 the first time it
// sees a key.  The map keeps its entries sorted by key.
int main(int argc, char** argv) {
  std::vector<std::string> words = {"red", "blue", "red", "green", "blue",
                                    "red"};
  std::map<std::string, int> freq;

  for (const std::string& w : words) {
    freq[w]++;  // [] inserts 0 the first time, then we increment
  }

  cout << "frequencies (sorted by key):" << endl;
  for (const auto& entry : freq) {
    cout << "  " << entry.first << ": " << entry.second << endl;
  }

  return EXIT_SUCCESS;
}