#include <iostream>
#include <unordered_map>
#include <functional>
const std::unordered_map<char, std::function<int(int, int)>> operations = {
{'+', [](int a, int b){ return a + b; }},
{'-', [](int a, int b){ return a - b; }},
{'*', [](int a, int b){ return a * b; }},
{'/', [](int a, int b){ return a / b; }},
{'%', [](int a, int b){ return a % b; }},
// etc...
};
int main() {
char a = '+';
auto op = operations.at(a);
int b = op(2, 2);
std::cout << b << std::endl;
a = '-';
op = operations.at(a);
b = op(2, 2);
std::cout << b << std::endl;
//...
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgpjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8Y2hhciwgc3RkOjpmdW5jdGlvbjxpbnQoaW50LCBpbnQpPj4gb3BlcmF0aW9ucyA9IHsKICAgIHsnKycsIFtdKGludCBhLCBpbnQgYil7IHJldHVybiBhICsgYjsgfX0sCiAgICB7Jy0nLCBbXShpbnQgYSwgaW50IGIpeyByZXR1cm4gYSAtIGI7IH19LAogICAgeycqJywgW10oaW50IGEsIGludCBiKXsgcmV0dXJuIGEgKiBiOyB9fSwKICAgIHsnLycsIFtdKGludCBhLCBpbnQgYil7IHJldHVybiBhIC8gYjsgfX0sCiAgICB7JyUnLCBbXShpbnQgYSwgaW50IGIpeyByZXR1cm4gYSAlIGI7IH19LAogICAgLy8gZXRjLi4uCn07CgppbnQgbWFpbigpIHsKCWNoYXIgYSA9ICcrJzsKCWF1dG8gb3AgPSBvcGVyYXRpb25zLmF0KGEpOwoJaW50IGIgPSBvcCgyLCAyKTsKCXN0ZDo6Y291dCA8PCBiIDw8IHN0ZDo6ZW5kbDsKCglhID0gJy0nOwoJb3AgPSBvcGVyYXRpb25zLmF0KGEpOwoJYiA9IG9wKDIsIDIpOwoJc3RkOjpjb3V0IDw8IGIgPDwgc3RkOjplbmRsOwoKCS8vLi4uCgoJcmV0dXJuIDA7Cn0=