Есть ли структура в Python, похожая на С++ STL-карту?

Существует ли структура в Python, которая поддерживает аналогичные операции с C++ STL map, а сложность операций соответствует C++ STL map?

Ответ 1

dict обычно достаточно близко - чего вы хотите, чтобы этого не делалось?

Если ответ "обеспечить порядок", то что на самом деле неправильно с for k in sorted(d.keys())? Может быть, использует слишком много памяти? Если вы делаете много упорядоченных обходов, чередующихся с вставками, тогда "ОК", точка взята, вам действительно нужно дерево.

dict на самом деле является хеш-таблицей, а не b-деревом. Но тогда map не определено как b-дерево, поэтому он не позволяет делать такие вещи, как отсоединение поддеревьев как новый map, он просто имеет те же сложности производительности. Все, что действительно осталось беспокоиться, это то, что происходит с dict, когда есть большое количество хэш-коллизий, но должно быть довольно редко использовать Python в ситуациях, когда вам нужны плохие наихудшие гарантии производительности.

Ответ 2

Я считаю, что стандартный тип python dict() будет делать трюк в большинстве случаев. Разница с С++ std:: map заключается в том, что dict impedmented как хэш-карта, а карта С++ - на основе дерева.

Ответ 5

Python SortedDict похож на С++ STL-карту. Вы можете прочитать об этом здесь или здесь.

SortedDict - это контейнер пар ключ-значение, в котором порядок наложенных на ключи в соответствии с их упорядоченным отношением друг к другу. Как и в случае с встроенным типом данных типа Pythons, SortedDict поддерживает быстрый вставка, удаление и поиск по ключевым словам.

Ответ 6

Посмотрите на модуль bintrees (pip install bintrees). Этот пакет предоставляет двоичные-RedBlack- и AVL-деревья, написанные на Python и Cython/C.