Нет, std::hash
не гарантирует, что результат будет одинаковым на всех компьютерах, сборках или даже выполнениях одной и той же сборки на одном компьютере. Ваша единственная гарантия состоит в том, что во время одного выполнения равные объекты имеют одинаковый хэш. (Конечно, нет никакой гарантии, что объекты, которые неравны, имеют разные хэши.)
Некоторые реализации стараются изменить результаты хеширования между выполнениями, поскольку это снижает риски отказа в обслуживании из-за низкой производительности хеш-таблиц при наличии множества ключей с одинаковым хеш-кодом. Это прямо разрешено стандартом, который гарантирует только согласованность результатов в течение всего срока действия программы.
Если вам нужна повторяемость между запусками и машинами, вы не можете использовать std::hash
и должны развернуть свой собственный эквивалент.