Блог пользователя Cabpacob

Автор Cabpacob, 7 лет назад, По-русски

Всем здравствуйте, сегодня решал задачу "Химикаты Молли" и столкнулся с странным временем исполнения для одного и того же кода с минимальными правками. Слышал, что у MS C++ быстрее ввод, но такая большая разница во времени вряд ли обусловлена лишь потоками ввода/вывода.

Для MS :
map — 592мс
unordered_map — 280мс.

Для GNU C++14 :
map — 499мс.
unordered_map — >2500мс.

Подскажите, почему так, при средней асимптотике для unordered_map O(1) время работы в разы больше, чем для map с O(logn). Если грешить на большие скрытые константы, то почему на MS unordered_map работает быстрее?

Дальше стало интересно как на время работы повлияет отключение синхронизации потоков ввода/вывода(на MS почему-то иногда отключение синхронизации приносит обратный результат, если знаете, объясните, пожалуйста, почему так).

Для MS :
map + выключенная синхронизация потоков — 499мс, быстрее, чем с синхронизацией.
unordered_map + выключенная синхронизация потоков — 327мс, медленнее, чем с синхронизацией.

Для GNU C++14 : map — 327мс.
unordered_map — >2500мс.

Буду рад, если просветите меня в данном вопросе. До этого были случаи, когда на MS и GNU один и тот же код получал различные вердикты, как в пользу MS, так и в пользу GNU.

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Т.е. в пределах GNU unordered_map и unordered_set для 64битных чисел использовать не стоит?