Я портирую программу на C ++ на Python. В некоторых местах он использует std::set
для хранения объектов, которые определяют свои собственные операторы сравнения. Поскольку стандартная библиотека Python не имеет эквивалента std::set
(отсортированная структура данных сопоставления значения ключа), я попытался использовать обычный словарь, а затем сортировать его при итерации, например:
def __iter__(self):
items = self._data.items()
items.sort()
return iter(items)
Однако профилирование показало, что все вызовы от .sort()
до __cmp__
являются серьезным узким местом. Мне нужна лучшая структура данных - по сути, отсортированный словарь. Кто-нибудь знает о существующей реализации? В противном случае, какие-либо рекомендации о том, как я должен реализовать это? Производительность чтения важнее, чем производительность записи, а время важнее памяти.
Бонусные баллы, если он поддерживает несколько значений на ключ, например C ++ std::multimap
.
Обратите внимание, что класс OrderedDict
не соответствует моим потребностям, потому что он возвращает элементы в порядке вставки, тогда как я хочу, чтобы они сортировались с использованием их методов __cmp__
.