Хипстеры против unordered map, счёт 1:0
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.01.19 21:22
Оценка: 1 (1) -1
Что такое unordered map — пояснять не нужно (кому нужно, закройте дверь с той стороны). У ей внутре неонка хэш-таблица, неважно, какого названия в конкретном месте, какого именно хэша и какого аккредитива addressing. Порядок ключей — не определён, может меняться в зависимости от фазы Луны и погоды на Сатурне, хотя обычно он более предсказуем — где делят хэш на простое число (замучивая процессор тяжёлой операцией деления, как в GCC STL), где доставая младшие биты. Но в любом случае он не фиксирован.

Есть два варианта, как допилить до фиксированного порядка. В одном используется какое-то сравнение ключей по их значению; получаем STLʼный <map> (внутре, обычно, ксенонка красно-чёрное дерево или что-то похожее). Но обидно людям, что O(log N) на одну операцию, всупереч хэшовому O(1), хоть и конкретно амортизированному. Поэтому некий сумрачный гений родил другой вариант: неважно, какие ключи по смыслу, главное, в каком порядке поступили. Не знаю, первой ли была Java, но LinkedHashMap там по жизни. Зато в JavaScript оно везде. Когда из меня хотели сделать вебостроителя (я успешно отбрыкался), я запомнил, что во всех его не-песочных реализациях соблюдается порядок перебора по порядку вставки. В ES6 это ещё и формализовали для Map, хотя и без него порядок соблюдается. (И на кой им ещё один Map такой же, как изначальный map? Будем считать, что тут так принято.)

В Python2 порядок был один на всех и не по времени вставки, а кому нужен по времени — идёшь за пером жар-птицы collections.OrderedDict. В 3.0-3.5 рандомизировали, чтобы было веселее. (Знобит меня от этого веселья ©.) В 3.6... встроенному словарю дали такое свойство! В 3.7 это документировали и обязались поддерживать. И знаете, я их понимаю. Потому что когда в тесте надо сравнивать "<sip:123@abc>;session=yes;privacy=full" с "<sip:123@abc>;privacy=full;session=yes", а оно расходится каждый второй запуск, как-то лениво распарсивать ещё раз, чтобы убедиться, что состав параметров одинаков — особенно когда это на 4-м уровне вложенности структуры. Поэтому задумчивым напильником перевожу на OrderedDict всё, что мешает, и признаю, что я тоже теперь хипстер, ибо так легко быть ленивым. Где тут ближайший бар, где вейпают смузи?

Зато C++ ещё не сдался. Видимо, его используют суровые лесорубы. Долго ли они продержатся? Японская бензопила уже на подходе.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.