Есть много предложений, касающихся распределительного шкафа. С точки зрения эффективности, это может быть лучше, может быть таким же. Хуже не будет.
Но если вы просто устанавливаете / возвращаете значение или имя на основе идентификатора, тогда ДА. Карта именно то, что вам нужно. Контейнеры STL оптимизированы, и если вы думаете, что можете оптимизировать лучше, то вы либо невероятно умны, либо потрясающе глупы.
например, один вызов с использованием std :: map с именем mymap,
thisvar = mymap[x.getID()];
намного лучше, чем 50 из них
if(x.getID() == ...){thisvar = ...;}
потому что это более эффективно, поскольку число идентификаторов увеличивается. Если вас интересует почему, найдите хороший учебник по структурам данных.
Но то, что я действительно посмотрю здесь, это время обслуживания / ремонта. Если вам нужно изменить имя переменной или использовать getID () или getName (), или внести какие-либо незначительные изменения, вы должны сделать это ПЯТНАДЦАТЬ РАЗ в вашем примере. И вам нужно новую строку каждый раз, когда вы добавляете идентификатор.
Карта сводит это к одному изменению кода. Неважно, сколько у вас идентификаторов.
Тем не менее, если вы на самом деле выполняете различные действия для каждого идентификатора, лучше использовать коммутатор. С помощью switch-case, а не if, вы можете улучшить производительность и удобочитаемость. Смотрите здесь: Преимущество оператора переключения if-else
Я бы избегал указателей на функции, если вы не очень ясно знаете, как они улучшат ваш код, потому что, если вы не уверены на 100% в своих действиях, синтаксис может быть испорчен, и это излишне для вас целесообразно использовать карту для.
По сути, меня интересует проблема, которую вы пытаетесь решить. Возможно, вам лучше использовать карту или распределительный шкаф, но если вы думаете, что можете использовать карту, это АБСОЛЮТНО то, что вы должны использовать вместо этого.