Хипстеры против 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++ ещё не сдался. Видимо, его используют суровые лесорубы. Долго ли они продержатся? Японская бензопила уже на подходе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.