Существует ли структура в Python
, которая поддерживает аналогичные операции с C++ STL map
, а сложность операций соответствует C++ STL map
?
Есть ли структура в Python, похожая на С++ STL-карту?
Ответ 1
dict
обычно достаточно близко - чего вы хотите, чтобы этого не делалось?
Если ответ "обеспечить порядок", то что на самом деле неправильно с for k in sorted(d.keys())
? Может быть, использует слишком много памяти? Если вы делаете много упорядоченных обходов, чередующихся с вставками, тогда "ОК", точка взята, вам действительно нужно дерево.
dict
на самом деле является хеш-таблицей, а не b-деревом. Но тогда map
не определено как b-дерево, поэтому он не позволяет делать такие вещи, как отсоединение поддеревьев как новый map
, он просто имеет те же сложности производительности. Все, что действительно осталось беспокоиться, это то, что происходит с dict
, когда есть большое количество хэш-коллизий, но должно быть довольно редко использовать Python в ситуациях, когда вам нужны плохие наихудшие гарантии производительности.
Ответ 2
Я считаю, что стандартный тип python dict() будет делать трюк в большинстве случаев. Разница с С++ std:: map заключается в том, что dict impedmented как хэш-карта, а карта С++ - на основе дерева.
Ответ 3
Python словари [5.5].
Ответ 4
Вы просмотрели словари Python?
Ответ 5
Python SortedDict похож на С++ STL-карту. Вы можете прочитать об этом здесь или здесь.
SortedDict - это контейнер пар ключ-значение, в котором порядок наложенных на ключи в соответствии с их упорядоченным отношением друг к другу. Как и в случае с встроенным типом данных типа Pythons, SortedDict поддерживает быстрый вставка, удаление и поиск по ключевым словам.
Ответ 6
Посмотрите на модуль bintrees (pip install bintrees). Этот пакет предоставляет двоичные-RedBlack- и AVL-деревья, написанные на Python и Cython/C.