Вы добавили много кода.В объектном файле есть не только строки, но и сгенерированный код, и, возможно, отладочная информация (например, информация о номере строки) для каждой строки.Все это складывается.
Это также очень плохой способ инициализации карты;если это не сгенерированный машиной код, вы не хотите его писать.(И хотя, возможно, здесь нет проблемы, это означает, что карта не может быть const
.) Более типичным решением для инициализации карты может быть что-то вроде:
struct MapInitializer
{
typedef std::map<std::string, std::string> MapType
char const* key;
char const* value;
operator MapType::value_type() const
{
return MapType::value_type(key, value);
}
};
static MapInitializer initialValues[] =
{
{ "abc01", "Brussels" },
{ "xyz03", "Liege" },
// ...
};
и затем:
std::map<std::string, std::string> city(
std::begin( initialValues ), std::end( initialValues ) );
(Если инициализация должна быть отложена до более позднего вызова функции, тогда можно использовать:
city = std::map<std::string, std::string>(
std::begin( initialValues ), std::end( initialValues ) );
. Но, как правило, если карта должна быть инициализирована с постоянной времени компиляциисписок, лучше всего сделать это в определении переменной, как указано выше.)