I'm porting a C++ program to Python. There are some places where it uses std::set
to store objects that define their own comparison operators. Since the Python standard library has no equivalent of std::set
(a sorted key-value mapping data structure) I tried using a normal dictionary and then sorting it when iterating, like this:
def __iter__(self):
items = self._data.items()
items.sort()
return iter(items)
However, profiling has shown that all the calls from .sort()
to __cmp__
are a serious bottleneck. I need a better data structure - essentially a sorted dictionary. Does anyone know of an existing implementation? Failing that, any recommendations on how I should implement this? Read performance is more important than write performance and time is more important than memory.
Bonus points if it supports multiple values per key, like the C++ std::multimap
.
Note that the OrderedDict
class doesn't fit my needs, because it returns items in the order of insertion, whereas I need them sorted using their __cmp__
methods.