Если ваша хеш-функция не является причиной, лучшее, что вы можете сделать, это, вероятно, использовать другую реализацию карты. Поскольку ваши ключи довольно велики, лучшим вариантом может быть использование unordered_map
из Boost.Intrusive library . В качестве альтернативы вы можете попробовать закрытое хеширование: Google SparseHash или MCT , хотя профилирование, безусловно, необходимо, потому что закрытое хеширование рекомендуется, когда элементы достаточно малы. (SparseHash более проверен и хорошо протестирован, но MCT не нуждается в этих set_empty()
/ set_deleted()
методах).
EDIT:
Я только что заметил, что в упомянутой мной библиотеке Boost нет навязчивой карты, только set и multiset. Тем не менее, вы можете попробовать две закрытые библиотеки хеширования.
РЕДАКТИРОВАТЬ 2:
STL hash_map
не является стандартным, это, вероятно, некоторое расширение и не переносимо во всех компиляторах.