Инициализация статического std :: map <int, int> в C ++ - PullRequest
398 голосов
/ 26 сентября 2008

Как правильно инициализировать статическую карту? Нужна ли нам статическая функция, которая ее инициализирует?

Ответы [ 11 ]

0 голосов
/ 05 июля 2014

У вас есть несколько очень хороших ответов здесь, но я для меня, это похоже на случай "когда все, что вы знаете, это молот" ...

Самый простой ответ на вопрос, почему не существует стандартного способа инициализации статической карты, - нет веской причины когда-либо использовать статическую карту ...

Карта - это структура, предназначенная для быстрого поиска неизвестного набора элементов. Если вы знаете элементы заранее, просто используйте C-массив. Введите значения отсортированным образом или выполните сортировку по ним, если вы не можете этого сделать. Затем вы можете получить производительность log (n), используя stl :: functions для зацикливания записей, lower_bound / upper_bound. Когда я проверял это ранее, они обычно работают как минимум в 4 раза быстрее, чем карта.

Преимущества многократно ... - более высокая производительность (* 4, я измерял на многих типах процессоров, всегда около 4) более простая отладка. Просто проще увидеть, что происходит с линейным макетом. - Тривиальные реализации операций копирования, если это станет необходимым. - Он не выделяет память во время выполнения, поэтому никогда не выдаст исключение. - Это стандартный интерфейс, поэтому его очень легко обменивать, библиотеки DLL или языки и т. Д.

Я мог бы продолжить, но если вы хотите больше, почему бы не взглянуть на многочисленные блоги Страуструпа на эту тему.

...