C++main.cpp · 45 行#include <iostream>#include <map>#include <string> using Stock = std::map<std::string, int>; // 바꾸는 함수는 참조(&)로 받는다: 복사본이 아니라 main의 stock 그 자체int add(Stock& stock, const std::string& name, int k) { stock[name] += k; // 없으면 0으로 만들고 더한다 — 여기서는 그게 맞다 return stock[name];} // 읽기만 하는 함수는 const 참조: 복사도 없고, stock[name]처럼 넣어 버리는 코드는 컴파일되지 않는다int get(const Stock& stock, const std::string& name) { auto it = stock.find(name); return it == stock.end() ? 0 : it->second;} int use(Stock& stock, const std::string& name, int k) { auto it = stock.find(name); if (it == stock.end() || it->second < k) return -1; it->second -= k; int left = it->second; if (left == 0) stock.erase(it); // erase 뒤에는 it를 쓰지 않는다 return left;} int main() { int n; std::cin >> n; Stock stock; for (int i = 0; i < n; i++) { std::string cmd, name; std::cin >> cmd >> name; if (cmd == "get") { std::cout << get(stock, name) << '\n'; } else { int k; std::cin >> k; std::cout << (cmd == "add" ? add(stock, name, k) : use(stock, name, k)) << '\n'; } } std::cout << stock.size() << '\n'; for (const auto& [name, qty] : stock) std::cout << name << ' ' << qty << '\n';}