Всем здравствуйте, сегодня решал задачу "Химикаты Молли" и столкнулся с странным временем исполнения для одного и того же кода с минимальными правками. Слышал, что у 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.