Эффективная Сортированная Карта Int32/Uint32 / Разреженный Массив

Я ищу специализированную (и быструю) отсортированную карту Int32/UInt32 (которая предпочтительно быстрее, чем System.Collections.Generic.SortedDictionary, где K - это либо Int32, либо UInt32).

Он будет использоваться в качестве разреженного массива, есть ли реализации для.NET?

1 ответ

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

public class DoubleDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
    private Dictionary<TKey, TValue> backingHash = new Dictionary<TKey, TValue>();
    private SortedDictionary<TKey, TValue> backingTree = new SortedDictionary<TKey, TValue>();

    // For all the modify methods, do it in both.
    // For all retrieval methods, pick one of the backing dictionaries, and just use that one.
    // For example, contains and get on the Hash, iteration on the Tree.
}
Другие вопросы по тегам