Если вы так сильно беспокоитесь о производительности, то почему вы используете строки для ключей? Что делать, если у вас был enum? Как это:
enum Settings
{
WorldTime,
...
};
Тогда ваша карта будет использовать целые числа для ключей, а не для строк. Он должен сравнивать ключи, потому что я считаю, что std :: map реализован в виде сбалансированного дерева. Сравнения между целыми числами намного быстрее, чем сравнения между строками.
Кроме того, если вы используете enum для ключей, вы можете просто использовать массив, потому что enum - это, по сути, карта от некоторого вида символа (например, WorldTime) до целого числа, начиная с нуля. Итак, сделайте это:
enum Settings
{
WorldTime,
...
NumSettings
};
А затем объявите ваши mSettings как массив:
int mSettings[NumSettings];
Который имеет более быстрое время поиска по сравнению с std :: map. Ссылка вот так:
DrawText(mSettings[WorldTime]);
Поскольку вы в основном просто получаете доступ к значению в массиве, а не к карте, это будет намного быстрее, и вам не нужно беспокоиться о хакере указателя / ссылки, который вы пытались сделать в первом место.