Тип словаря с определенным порядком ключей

Я хотел бы использовать тип, который ведет себя как простой список пар [(a,b)], который служит словарем, сопоставляя ключи типа aзначениям типа b, сохраняя «заданный пользователем» определенный порядок ключей. (то есть, как и в случае с обычными списками - я хотел бы иметь возможность «добавлять» элемент, который затем распознается как «последний элемент».) Однако я хотел бы, чтобы поиск с произвольным доступом по ключам был лучше, чем линейная производительность, т.е. что Data.Map. Одним из вариантов было бы просто поддерживать обычную карту в дополнение к списку ключей, который определяет их порядок:

data OrderedDict a b = OrderedDict (Map a b) [a]

, а затем определить операции добавленияи т. д., которые синхронизируют две коллекции ключей. Однако кажется уродливым поддерживать две отдельные коллекции одних и тех же ключей. Существует ли готовый тип данных, который уже сочетает упорядоченные ключи с эффективным поиском произвольного доступа по ключу?

8
задан gcbenison 8 June 2012 в 17:11
поделиться