# 11465 - Use std::map >author: Utin ###### tags: `STL` --- ## Brief See the code below ## Solution 0 ```cpp= #include <iostream> #include <map> #include <string> #include <vector> using namespace std; map<string, vector<int>> M; void insert(); void sum(); void range_output(); void range_erase(); void output(); int main() { string op; while (cin >> op) { if (op == "insert") insert(); if (op == "sum") sum(); if (op == "output") output(); if (op == "range") { cin >> op; if (op == "output") range_output(); if (op == "erase") range_erase(); } } } void insert() { string key; int value; cin >> key >> value; auto it = M.find(key); if (it == M.end()) { vector<int> tmp; tmp.push_back(value); M.insert({key, tmp}); } else it->second.push_back(value); } void sum() { string key; cin >> key; auto it = M.find(key); if (it == M.end()) cout << "0\n"; else { int sum = 0; for (auto element : it->second) sum += element; cout << sum << '\n'; } } void range_output() { string a, b; cin >> a >> b; for (auto it : M) { if (it.first >= a && it.first <= b) { for (auto i = it.second.rbegin(); i < it.second.rend(); i++) cout << *i; cout << ' '; } } cout << '\n'; } void range_erase() { string a, b; cin >> a >> b; vector<string> trash; for (auto it : M) if (it.first >= a && it.first <= b) trash.push_back(it.first); for (auto it : trash) M.erase(it); } void output() { for (auto it : M) { for (auto i = it.second.rbegin(); i < it.second.rend(); i++) cout << *i; cout << ' '; } cout << '\n'; } // By Utin ``` ## Reference