Подумайте, как работает хеш-функция. Хеш - это всегда функция f: input-> output , которая отображает входной набор I в (обычно меньший) выходной набор O, так что входной набор приблизительно равномерно распределен по выходному набору.
Нет требования , что порядок должен быть сохранен; фактически, это необычно, что это будет сохранено, потому что (поскольку выходной набор меньше), будут значения * i, j *, которые имеют одинаковый хэш. Это называется столкновением .
С другой стороны, нет причин, по которым это не следует. Фактически, можно доказать, что всегда будет существовать хотя бы одна последовательность, в которой будет сохранять порядок.
Но есть и другая возможность: если ВСЕ значения сталкиваются, то они сохраняются в какой-то другой структуре данных, например в списке. Может случиться так, что все они сталкиваются, а другая структура навязывает порядок.
Три возможности: hash_map
случается, чтобы отсортировать эту конкретную последовательность, или hash_map
фактически реализуется как массив, или значения сталкиваются, и реализация сохраняет коллизии таким образом, что дает отсортированный порядок.