#include <iostream>
#include <map>
#include <functional>
#include <string>
using namespace std;
void f_1234() { cout << "1234\n"; }
void f_ABCD() { cout << "ABCD\n"; }
void f_default() { cout << "default\n"; }
void f( const char* s )
{
using function_t = std::function< void() >;
using string_to_function = map< string, function_t >;
static string_to_function m =
{
{"1234", f_1234}, // assosciate "1234" to function f_1234
{"ABCD", f_ABCD}, // assosciate "ABCD" to function f_ABCD
};
auto i = m.find( s );
return i == m.end()
? f_default() // not found in map
: i->second(); // found, so we call the function
}
int main()
{
f( "1234" );
f( "ABCD" );
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGZfMTIzNCgpIHsgY291dCA8PCAiMTIzNFxuIjsgfQoKdm9pZCBmX0FCQ0QoKSB7IGNvdXQgPDwgIkFCQ0RcbiI7IH0KCnZvaWQgZl9kZWZhdWx0KCkgeyBjb3V0IDw8ICJkZWZhdWx0XG4iOyB9Cgp2b2lkIGYoIGNvbnN0IGNoYXIqIHMgKQp7CiAgdXNpbmcgZnVuY3Rpb25fdCA9IHN0ZDo6ZnVuY3Rpb248IHZvaWQoKSA+OwogIHVzaW5nIHN0cmluZ190b19mdW5jdGlvbiA9IG1hcDwgc3RyaW5nLCBmdW5jdGlvbl90ID47CgogIHN0YXRpYyBzdHJpbmdfdG9fZnVuY3Rpb24gbSA9CiAgewogICAgeyIxMjM0IiwgZl8xMjM0fSwgLy8gYXNzb3NjaWF0ZSAiMTIzNCIgdG8gZnVuY3Rpb24gZl8xMjM0CiAgICB7IkFCQ0QiLCBmX0FCQ0R9LCAvLyBhc3Nvc2NpYXRlICJBQkNEIiB0byBmdW5jdGlvbiBmX0FCQ0QKICB9OwoKICBhdXRvIGkgPSBtLmZpbmQoIHMgKTsKCiAgcmV0dXJuIGkgPT0gbS5lbmQoKQogICAgPyBmX2RlZmF1bHQoKSAvLyBub3QgZm91bmQgaW4gbWFwCiAgICA6IGktPnNlY29uZCgpOyAvLyBmb3VuZCwgc28gd2UgY2FsbCB0aGUgZnVuY3Rpb24KfQoKaW50IG1haW4oKQp7CiAgZiggIjEyMzQiICk7CiAgZiggIkFCQ0QiICk7Cn0K