[英]Looking for .Net sorted collection with access to previous and next elements
我正在實現Bentley-Ottman算法 ,該算法要求掃描線(SL)具有以下屬性的數據結構:
T
的排序集合,其中T
是IComparable<T>
, O(log count)
,並應返回元素是否已插入, O(log count)
, e
(無論是否已經在集合中),我需要按排序順序在e
旁邊的集合的上一個和下一個元素。 SortedList<TKey, TValue>
在插入和刪除時具有O(count)
,因為它必須移動列表中的所有連續元素。 但是,我可以索引它,因此一旦知道e
的索引,就可以獲取O(1)
的上一個和下一個元素。
SortedDictionary<TKey, TValue>
和SortedSet<T>
具有O(log count)
插入和刪除,但是我找不到任何迭代器可以為我提供下一個和上一個元素。
有沒有可以給我全部功能的實現方式?
如果不是,最快的實現方式是什么? LinkedList<T>
不允許二進制搜索。 List<T>
仍然具有O(count)
插入/刪除。 我真的必須實現自己的平衡樹嗎?
例如, TreeDictionary
中的C5收集庫和的NuGet和github上有一個
如果存在k的前置變量,則bool TryPredecessor(K k,out of KeyValuePair res)返回true,在這種情況下,將前任綁定到res; 否則返回false並將KeyValuePair的默認值綁定到res。 根據密鑰比較器,k的前身是排序字典中的最大密鑰嚴格小於k的條目。 如果k沒有前置項,則拋出NoSuchItemException;否則,拋出NoSuchItemException。 即,任何密鑰都不小於k。
和一個
如果存在k的后繼,則bool TrySuccessor(K k,out of KeyValuePair res)返回true,在這種情況下,將后繼綁定到res; 否則返回false並將KeyValuePair的默認值綁定到res。 k的后繼項是排序字典中的條目,根據密鑰比較器,其最小密鑰嚴格大於k。 如果k沒有后繼,則拋出NoSuchItemException;否則,拋出NoSuchItemException。 也就是說,字典中的任何條目都不具有大於k的鍵。
並應具備您所需的幾乎所有東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.