Вышеприведенные ответы дают полный обзор, это касается только вашего второго вопроса:
Поиск элемента карты по ключу имеет сложность O (log n). Поиск по хэш-карте по ключу имеет сложность O (1) + мелочи на стороне в случае коллизий. Так что, если есть хорошая хеш-функция для имен ваших функций, используйте ее. Ваша реализация будет стандартной. Это должно быть хорошо.
Но имейте в виду, что все, что меньше ста элементов, не принесет слишком много пользы.
Единственным недостатком хэш-карты является столкновение. В вашем случае, hashmap будет относительно статичным. Вы знаете имена функций, которые вы поддерживаете. Поэтому я советую вам создать простой тестовый пример, в котором вы вызываете unordered_map <...> :: hash_function со всеми вашими ключами, чтобы убедиться, что ничего не конфликтует. После этого вы можете забыть об этом.
Быстрый гугл для потенциальных улучшений хеш-функций получил меня там:
Несколько хороших хеш-функций
Возможно, в зависимости от ваших соглашений об именах, вы можете улучшить некоторые аспекты этой функции.