2015-10-06 23 views
3

我目前正試圖找出哪個數據結構可能是最好的一個。所以這裏是我想要做的:支持排序的最佳數據結構

我有一個對象和與此對象相關的值。我希望能夠知道結構中的哪個條目具有最小的值。

因此,舉例來說,如果我有以下對象:

ZebraObject, 10 
CowObject, 1 
DogObject, 2 

我希望能夠知道哪些對象具有最小值(在這種情況下,是CowObject)。我還必須訪問CowObject中的數據(調用一些函數,進行一些計算等),最後,我會做一些類似'value + = value'的事情。我訪問的CowObject所以後,數據會看起來像

ZebraObject, 10 
CowObject, 2 // (1 + 1) 
DogObject, 2 

誰能幫我找出最佳的數據結構的這種情況呢?

編輯:我假設每個元素(至少對於對象)都是唯一的。與對象關聯的浮點值可以是重複的。

+1

看來你需要一個小小的堆。在這種情況下,你的最小對象將在堆的頂部,它將需要O(1)時間來獲得它的值 –

+0

我完全忘記了最小堆!非常感謝你!! – dwnenr

+0

@SerhiyChupryk,根據你的建議,值1,2,10將被視爲鍵和minheap將是理想的,但目前的OP正在試圖考慮隨着時間的推移修改這些鍵,並將包含重複的鍵。哦,是的,最小/最大堆可以包含重複項。我在開始的思考過程中認爲ZebraObject,CowObject,DogObject是鍵,而10,1,2是值。我應該想到另一種方式。 (感謝指出minheap) –

回答

0

排序集有助於滿足您的要求。但排序設置不允許重複。用於根據對象的特定字段實施IComparer進行排序。

你可以從 SortedSet and equality

+0

一個有序集合在這裏做的很多;) – Carsten

+0

看着msdn上的SortedSet,好像我需要將float值作爲對象類的成員。有沒有辦法讓這兩個分離? – dwnenr

+0

意味着你想保持如果這樣,那麼你可以使用 –

0

的ObservableCollection得到更多的幫助是最好的方式,如果你將綁定到列表中。它已經實現了INotifyPropertyChanged接口。也許讓你的ViewModel繼承可觀察收藏