Как получить первый ключ больше указанного ключа в SortedDictionary за O (log n)?

Скажем, у меня есть следующие коды:

SortedDictionary<int,string> test = new SortedDictionary<int, string> ( );
test.Add ( 1, "one" );
test.Add ( 3, "three" );
test.Add ( 7, "seven" );
test.Add ( 8, "eight" );
int key = GetFirstKeyGreaterThan ( test, 3 ); // expects to get 7
int key2 = GetFirstKeyGreaterThan ( test, 6 ); // expects to get 7

Есть ли простой способ реализовать метод GetFirstKeyGreaterThan? Я знаю, что мы можем использовать метод GetEnumerator и вызывать MoveNext после достижения ключа 3, но это будет операция O(n).

Я не хочу использовать SortedList, потому что мне нужно O (log n) для вставки и удаления ключа.


person Setyo N    schedule 29.10.2012    source источник
comment
Вы, вероятно, могли бы попробовать отсортированную коллекцию вместо словаря «есть ли интерфейс, подобный icollectiont, но предназначенный для отсортированных коллекций»> stackoverflow.com/questions/13131167/   -  person Felix    schedule 30.10.2012
comment
Название вашего вопроса относится к SortedDictionary, а код содержит Dictionary. Может не быть решения сделать то, что вы хотите, используя любой из этих двух, но это поможет нам ответить, если вы уточните, какой из них вы имеете в виду.   -  person MvanGeest    schedule 30.10.2012
comment
Спасибо @MvanGeest, вы правы. Я отредактировал коды.   -  person Setyo N    schedule 30.10.2012
comment
Лучше посмотрите это: словарь предыдущего ключа из отсортированного. Решение состоит в том, чтобы использовать SortedList<K, V> или TreeDictionary<K, V> из C5.   -  person nawfal    schedule 11.06.2014